Spring Mvc 字符串转日期异常(Can not deserialize value of type Date from String)

r囧r小猫 2022-12-03 02:00 227阅读 0赞

问题重现

在使用springMVC时,当我们页面提交的某个值是2020-09-01 14:43:44这种形式的值,而我们后台JavaBean采用Date格式来接收,就会报错

Can not deserialize value of type Date from String

原因

项目中采用就jackson作为反序列工具,jackson默认支持的日期反序列格式有如下

  • yyyy-MM-dd’T’HH:mm:ss.SSSZ
  • yyyy-MM-dd’T’HH:mm:ss.SSS’Z’
  • EEE, dd MMM yyyy HH:mm:ss zzz
  • yyyy-MM-dd

默认是不支持yyyy-MM-dd HH:mm:ss这种格式的,所以反序列化失败

解决方案

方案一、重写jackson反序列化

  1. package com.bxoon.config;
  2. import com.fasterxml.jackson.core.JsonParser;
  3. import com.fasterxml.jackson.core.JsonProcessingException;
  4. import com.fasterxml.jackson.databind.DeserializationContext;
  5. import com.fasterxml.jackson.databind.JsonDeserializer;
  6. import java.io.IOException;
  7. import java.text.ParseException;
  8. import java.text.SimpleDateFormat;
  9. import java.util.Date;
  10. /** * @author :GuangxiZhong * @date :Created in 2020/9/1 11:41 * @description: * @modified By: * @version: 1.0 */
  11. public class CustomJsonDateDeserializer extends JsonDeserializer<Date> {
  12. @Override
  13. public Date deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
  14. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  15. String date = jsonParser.getText();
  16. try {
  17. return format.parse(date);
  18. } catch (ParseException e) {
  19. throw new RuntimeException(e);
  20. }
  21. }
  22. }

同时在对应类的Date字段上加上如下注解

  1. @JsonDeserialize(using = CustomJsonDateDeserializer.class)
  2. private Date txnTime;

方案二、直接使用jackson注解,不需要重写反序列化

  1. @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
  2. private Date txnTime;

方案三、直接使用fastjson注解,不要重写反序列化

引入fastjson

  1. <!-- fastjson -->
  2. <dependency>
  3. <groupId>com.alibaba</groupId>
  4. <artifactId>fastjson</artifactId>
  5. <version>1.2.32</version>
  6. </dependency>
  7. <!-- jackson-->
  8. <dependency>
  9. <groupId>com.fasterxml.jackson.core</groupId>
  10. <artifactId>jackson-databind</artifactId>
  11. <version>2.6.4</version>
  12. </dependency>

Date字段上加上注解

  1. @JSONField(format = yyyy-MM-dd HH:mm:ss”)
  2. private Date txnTime;

原文:https://blog.csdn.net/a718515028/article/details/85245957

发表评论

表情:
评论列表 (有 0 条评论,227人围观)

还没有评论,来说两句吧...

相关阅读