处理时间格式化BUG:rejected value [2021-04-07]; codes [typeMismatch.student.birthday,typeMismatch.birthday,t

处理时间格式化BUG

  • 前言
  • 一、bug
  • 二、分析
  • 三、解决方案
  • 四、@DateTimeFormat和@JsonFormat的区别

前言

我们在开发中会处理到时间这种格式的数据,经常遇到的bug就是因为时间格式不匹配引起的。

一、bug

Field error in object ‘student’ on field ‘birthday’: rejected value [2021-04-07]; codes [typeMismatch.student.birthday,typeMismatch.birthday,typeMismatch.java.util.Date,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [student.birthday,birthday]; arguments []; default message [birthday]]; default message [Failed to convert property value of type ‘java.lang.String’ to required type ‘java.util.Date’ for property ‘birthday’; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [java.util.Date] for value ‘2021-04-07’; nested exception is java.lang.IllegalArgumentException]]

二、分析

前台传到后台的数据类型是’java.lang.String,
而后台需要的是java.util.Date。

三、解决方案

我们需要注意:
1.在前台向后台传数据时,必须要使用url拼接参数的方式才生效;
2.导包,@DateTimeFormat属于org.springframework.format.annotation.DateTimeFormat;
3.在实体类的属性上面加上这个注解。
yyyy-MM-dd HH:mm:ss代表年月日时分秒,比如:2020-11-26 16:01:01;我们需要根据实际存储的数据来定义pattern的值。
如果 pattern = “yyyy-MM-dd HH:mm:ss”,那么前端传递的必须是年月日时分秒的字符串,否则抛出异常;
如果 pattern = “yyyy-MM-dd 01:03:03”,那么前端传递的必须是带时分秒,并且是01:02:03的字符串,否则抛出异常;
如果 pattern = “yyyy-MM-dd”,前端传递的参数带不带时分秒都是可以的,并且时分秒会被格式化为00:00:00

   <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
   @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date birthday;

四、@DateTimeFormat和@JsonFormat的区别

时间格式化问题@DateTimeFormat和@JsonFormat的区别

你可能感兴趣的:(JAVA,EE,java,spring,bug)