Java前端實現(xiàn)發(fā)送date類型的參數(shù)給后端
@DateTimeFormat
第一次:Get方式傳參-成功
這個時候是用的get請求方式,get是把參數(shù)數(shù)據(jù)隊列加到提交表單的ACTION屬性所指的URL中,值和表單內(nèi)各個字段一一對應(yīng)
/**
* http://localhost:8080/intoParam?date=2019-01-18 11:11:11
*/
@RequestMapping(value = "/intoParam",method = RequestMethod.GET)
@ResponseBody
public void intoParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date date){
System.out.println(date);//Fri Jan 18 08:00:00 CST 2019
}第二次:Post方式傳參-失敗
/**
* http://localhost:8080/intoParam
* 請求體
* {
* "date":"2019-01-18 11:11:11"
* }
*/
@RequestMapping(value = "/intoParam",method = RequestMethod.POST)
@ResponseBody
public void intoParam2(@RequestBody DateVo dateVo){
System.out.println(dateVo.getDate());//Fri Jan 18 08:00:00 CST 2019
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class DateVo {
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date date;
}錯誤信息:
{
"timestamp": "2021-10-19T07:05:22.407+0000",
"status": 400,
"error": "Bad Request",
"message": "JSON parse error: Cannot deserialize value of type `java.util.Date` from String \"2019-01-18 11:11:11\": not a valid representation (error: Failed to parse Date value '2019-01-18 11:11:11': Cannot parse date \"2019-01-18 11:11:11\": while it seems to fit format 'yyyy-MM-dd'T'HH:mm:ss.SSSZ', parsing fails (leniency? null)); nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `java.util.Date` from String \"2019-01-18 11:11:11\": not a valid representation (error: Failed to parse Date value '2019-01-18 11:11:11': Cannot parse date \"2019-01-18 11:11:11\": while it seems to fit format 'yyyy-MM-dd'T'HH:mm:ss.SSSZ', parsing fails (leniency? null))\n at [Source: (PushbackInputStream); line: 2, column: 12] (through reference chain: com.mye.hl20springbootdataparam.vo.DateVo[\"date\"])",
"path": "/intoParam"
}
第三次:post傳參-成功
/**
* http://localhost:8080/intoParam
* 請求體是:
* {
* "date":"2019-01-18"
* }
*/
@RequestMapping(value = "/intoParam",method = RequestMethod.POST)
@ResponseBody
public void intoParam2(@RequestBody DateVo dateVo){
System.out.println(dateVo.getDate());//Fri Jan 18 08:00:00 CST 2019
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String format = sdf.format(dateVo.getDate());
System.out.println(format);//2019-01-18
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class DateVo {
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date date;
}原因:
springboot默認(rèn)采用jackson,而jackson只能識別以下幾種日期格式
"yyyy-MM-dd'T'HH:mm:ss.SSSZ"; "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"; "yyyy-MM-dd"; "EEE, dd MMM yyyy HH:mm:ss zzz"; long類型的時間戳(毫秒時間戳)
解決方法:
- 采用long時間戳,如:1537191968000
- 在傳參的對象上加上@JsonFormat注解并且指定時區(qū)
@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
第四次:post傳參-成功
/**
* http://localhost:8080/intoParam
* 請求體是:
* {
* "date":"2019-01-18 11:11:11"
* }
*/
@RequestMapping(value = "/intoParam",method = RequestMethod.POST)
@ResponseBody
public void intoParam2(@RequestBody DateVo dateVo){
System.out.println(dateVo.getDate());//Fri Jan 18 11:11:11 CST 2019
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String format = sdf.format(dateVo.getDate());
System.out.println(format);//2019-01-18 11:11:11
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class DateVo {
@DateTimeFormat(pattern="yyyy-MM-dd")
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date date;
}@jsonFormat
@JsonFormat(pattern=“yyyy-MM-dd”,timezone = “GMT+8”)
pattern:是你需要轉(zhuǎn)換的時間日期的格式timezone:是時間設(shè)置為東八區(qū),避免時間在轉(zhuǎn)換中有誤差@JsonFormat注解可以在屬性的上方,同樣可以在屬性對應(yīng)的get方法上,兩種方式?jīng)]有區(qū)別
/**
*http://localhost:8080/outParam
*/
@RequestMapping(value = "/outParam",method = RequestMethod.GET)
@ResponseBody
public DateVo intoParam2(){
return new DateVo(new Date());
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class DateVo {
// @DateTimeFormat(pattern="yyyy-MM-dd")
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date date;
}展示結(jié)果:
{
"date": "2021-10-19 15:44:51"
}總結(jié)
前端Content-Type 為application/json的請求時,我們使用@JsonFormat來進(jìn)行轉(zhuǎn)化,如果為表單,則應(yīng)該使用@DateTimeFormat
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot項目離線環(huán)境手動構(gòu)建的過程
文章介紹了如何在IntelliJ IDEA中手動創(chuàng)建一個Spring Boot項目,并詳細(xì)講解了pom.xml文件的配置和基本項目結(jié)構(gòu)的設(shè)置,感興趣的朋友跟隨小編一起看看吧2025-01-01
SpringBoot公共頁面抽取方法實現(xiàn)過程介紹
這篇文章主要介紹了SpringBoot抽取公共頁面的方法實現(xiàn)過程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-10-10
Java實現(xiàn)統(tǒng)計在線人數(shù)功能的方法詳解
很多人在筆試或者面試中問到:現(xiàn)在要你實現(xiàn)一個統(tǒng)計在線人數(shù)的功能,你該怎么設(shè)計?不知道的朋友,這篇文章就來告訴你具體實現(xiàn)方法2022-08-08
Springboot使用influxDB時序數(shù)據(jù)庫的實現(xiàn)
項目中需要存放大量設(shè)備日志,且需要對其進(jìn)行簡單的數(shù)據(jù)分析,信息提取工作,所以本文就介紹一下Springboot使用influxDB時序數(shù)據(jù)庫,感興趣的可以了解一下2021-08-08
詳解Java編程中final,finalize,finally的區(qū)別
這篇文章主要介紹了詳解Java編程中final,finalize,finally的區(qū)別,這個在Java面試題中簡直是太常見了...需要的朋友可以參考下2015-11-11

