当前位置:网站首页>Caused by: com. fasterxml. jackson. databind. Exc.invalidformatexception: exception resolution

Caused by: com. fasterxml. jackson. databind. Exc.invalidformatexception: exception resolution

2022-06-28 06:02:00 zhou_ zhao_ xu

Abnormal information :

Caused by: com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `java.util.Date` from String "2022-05-26 15:36:45": not a valid representation (error: Failed to parse Date value '2022-05-26 15:36:45': Cannot parse date "2022-05-26 15:36:45": while it seems to fit format 'yyyy-MM-dd'T'HH:mm:ss.SSSX', parsing fails (leniency? null))

The reason for the error :

  • By default ,Jackson Use com.fasterxml.jackson.databind.util.StdDateFormat Class to format .
    The time format is :yyyy-MM-dd’T’HH:mm:ss.SSSZ, by ISO-8601 data type .

  • jackson The default date inverse sequence does not support yyyy-MM-dd HH:mm:ss This format , So deserialization failed

terms of settlement :

  • Solution 1 : stay yml Configure the serialization format and time zone in the configuration
    spring:
      jackson:
        date-format: yyyy-MM-dd HH:mm:ss #  The default is StdDateFormat
        time-zone: GMT+8
    
  • Solution 2 : Use... On the entity class date parameter jackson annotation
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date createTime;
    
  • Solution three : Use... On the entity class date parameter fastjson annotation
    	<!-- fastjson -->
    	<dependency>
    		<groupId>com.alibaba</groupId>
    		<artifactId>fastjson</artifactId>
    		<version>1.2.55</version>
    	</dependency>
    	<!-- jackson-->
    	<dependency>
    		<groupId>com.fasterxml.jackson.core</groupId>
    		<artifactId>jackson-databind</artifactId>
    		<version>2.11.3</version>
    	</dependency>
    
    @JSONField(format = “yyyy-MM-dd HH:mm:ss”)
    private Date createTime; 
    
  • Solution 4 : rewrite jackson Deserialization
    import com.fasterxml.jackson.core.JsonParser;
    import com.fasterxml.jackson.core.JsonProcessingException;
    import com.fasterxml.jackson.databind.DeserializationContext;
    import com.fasterxml.jackson.databind.JsonDeserializer;
     
    import java.io.IOException;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
     
     
    public class CustomJsonDateDeserializer extends JsonDeserializer<Date> {
          
     
        @Override
        public Date deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
          
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String date = jp.getText();
            try {
          
                return format.parse(date);
            } catch (ParseException e) {
          
                throw new RuntimeException(e);
            }
        }
    }
    
    @JsonDeserialize(using = CustomJsonDateDeserializer.class)
    private Date createTime;
    
原网站

版权声明
本文为[zhou_ zhao_ xu]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/179/202206280549033460.html