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


<dependency>
	<groupId>com.alibabagroupId>
	<artifactId>fastjsonartifactId>
	<version>1.2.32version>
dependency>

<dependency>
	<groupId>com.fasterxml.jackson.coregroupId>
	<artifactId>jackson-databindartifactId>
	<version>2.6.4version>
dependency>

Date字段上加上注解

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

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

你可能感兴趣的:(Spring)