当前位置:   article > 正文

Java前端如何发送date类型的参数给后端_后端date类型前端怎么传

后端date类型前端怎么传

@DateTimeFormat

第一次:Get方式传参-成功 这个时候是用的get请求方式,get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应。

  1. /**
  2.  * http://localhost:8080/intoParam?date=2019-01-18 11:11:11
  3. */
  4.     @RequestMapping(value = "/intoParam",method = RequestMethod.GET)
  5.     @ResponseBody
  6.     public void intoParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss"Date date){
  7.         System.out.println(date);//Fri Jan 18 08:00:00 CST 2019
  8.     }

第二次:Post方式传参-失败

  1. /**
  2.      * http://localhost:8080/intoParam
  3.      * 请求体
  4.      * {
  5.      *     "date":"2019-01-18 11:11:11"
  6.      * }
  7.      */
  8.     @RequestMapping(value = "/intoParam",method = RequestMethod.POST)
  9.     @ResponseBody
  10.     public void intoParam2(@RequestBody DateVo dateVo){
  11.         System.out.println(dateVo.getDate());//Fri Jan 18 08:00:00 CST 2019
  12.     }
  13. @Data
  14. @AllArgsConstructor
  15. @NoArgsConstructor
  16. public class DateVo {
  17.     @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
  18.     private Date date;
  19. }

错误信息

  1. {
  2.  "timestamp""2021-10-19T07:05:22.407+0000",
  3.  "status"400,
  4.  "error""Bad Request",
  5.  "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\"])",
  6.  "path""/intoParam"
  7. }

第三次:post传参-成功

  1. /**
  2.      * http://localhost:8080/intoParam
  3.      * 請求體是:
  4.      * {
  5.      *     "date":"2019-01-18"
  6.      * }
  7.      */
  8.     @RequestMapping(value = "/intoParam",method = RequestMethod.POST)
  9.     @ResponseBody
  10.     public void intoParam2(@RequestBody DateVo dateVo){
  11.         System.out.println(dateVo.getDate());//Fri Jan 18 08:00:00 CST 2019
  12.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  13.         String format = sdf.format(dateVo.getDate());
  14.         System.out.println(format);//2019-01-18
  15.     }
  16. @Data
  17. @AllArgsConstructor
  18. @NoArgsConstructor
  19. public class DateVo {
  20.     @DateTimeFormat(pattern="yyyy-MM-dd")
  21.     private Date date;
  22. }

原因

springboot默认采用jackson,而jackson只能识别以下几种日期格式

  1. "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
  2.  
  3. "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
  4.  
  5. "yyyy-MM-dd";
  6.  
  7. "EEE, dd MMM yyyy HH:mm:ss zzz";
  8.  
  9. long类型的时间戳(毫秒时间戳)

解决方法

采用long时间戳,如:1537191968000

或者

在传参的对象上加上@JsonFormat注解并且指定时区。

  1. @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")

第四次:post传参-成功

  1. /**
  2.      * http://localhost:8080/intoParam
  3.      * 請求體是:
  4.      * {
  5.      *     "date":"2019-01-18 11:11:11"
  6.      * }
  7.      */
  8.     @RequestMapping(value = "/intoParam",method = RequestMethod.POST)
  9.     @ResponseBody
  10.     public void intoParam2(@RequestBody DateVo dateVo){
  11.         System.out.println(dateVo.getDate());//Fri Jan 18 11:11:11 CST 2019
  12.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  13.         String format = sdf.format(dateVo.getDate());
  14.         System.out.println(format);//2019-01-18 11:11:11
  15.     }
  16. @Data
  17. @AllArgsConstructor
  18. @NoArgsConstructor
  19. public class DateVo {
  20.     @DateTimeFormat(pattern="yyyy-MM-dd")
  21.     @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
  22.     private Date date;
  23. }

@jsonFormat

@JsonFormat(pattern=“yyyy-MM-dd”,timezone = “GMT+8”)

  1. pattern:是你需要转换的时间日期的格式
  2. timezone:是时间设置为东八区,避免时间在转换中有误差
  3. @JsonFormat注解可以在属性的上方,同样可以在属性对应的get方法上,两种方式没有区别

展示结果

  1. {
  2.  "date""2021-10-19 15:44:51"
  3. }

总结 前端Content-Type 为application/json的请求时,我们使用@JsonFormat来进行转化,如果为表单,则应该使用@DateTimeFormat

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/692588
推荐阅读
相关标签
  

闽ICP备14008679号