You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

非Spring Boot环境下Spring Web MVC LocalDate反序列化报错如何解决?

问题根因

你自定义的LocalDateDeserializer反序列化逻辑存在重复读取JSON流的问题:

  • 第一次调用jp.readValueAs(String.class)打印日志后,JsonParser的读取指针已经从当前日期字符串值,移动到了下一个JSON token(下一个字段的字段名)
  • 第二次调用jp.readValueAs(String.class)时,读取到的是字段名而非日期字符串,类型不匹配因此抛出MismatchedInputException
修复方案

修改LocalDateDeserializer的反序列化逻辑,仅读取一次JSON值存入变量后复用即可,修改后的代码如下:

public class LocalDateDeserializer extends StdDeserializer<LocalDate> {

    private static final long serialVersionUID = 1L;

    protected LocalDateDeserializer() {
        super(LocalDate.class);
    }


    @Override
    public LocalDate deserialize(JsonParser jp, DeserializationContext ctxt)
            throws IOException, JsonProcessingException {
        // 仅读取一次值存入变量复用
        String dateStr = jp.readValueAs(String.class);
        System.out.println(dateStr);
        LocalDate lDate;
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        try {
            lDate = LocalDate.parse(dateStr, dateTimeFormatter);
        } catch (Exception e) {
            System.out.println(e);
            lDate = LocalDate.now();
        }
        return lDate;
    }

}

修改完成后重新启动服务即可正常解析请求中的yyyy-MM-dd格式日期字符串为LocalDate类型。

额外校验点

如果修改后仍有问题,可检查POST请求体的dob字段格式是否符合要求,示例合法请求体如下:

{
  "id": 1,
  "name": "张三",
  "surname": "张",
  "dob": "2024-01-01",
  "salary": 10000,
  "gender": "男"
}

内容的提问来源于stack exchange,提问作者Fatih Aykut

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 00:15:01