0
点赞
收藏
分享

微信扫一扫

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


问题重现

在使用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反序列化

package com.bxoon.config;

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;

/**
* @author :GuangxiZhong
* @date :Created in 2020/9/1 11:41
* @description:
* @modified By:
* @version: 1.0
*/
public class CustomJsonDateDeserializer extends JsonDeserializer<Date> {

@Override
public Date deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date = jsonParser.getText();
try {
return format.parse(date);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
}

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

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

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

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

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

引入​​fastjson​​包

<!-- fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.32</version>
</dependency>
<!-- jackson-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.6.4</version>
</dependency>

Date字段上加上注解

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




举报

相关推荐

0 条评论