java.time.format.DateTimeParseException: Text '2019-07-31T05:08:18.416Z' could not be parsed at inde

java.time.format.DateTimeParseException: Text ‘2019-07-31T05:08:18.416Z’ could not be parsed at inde
前提背景是这样的 。 一个spring boot 的项目 ,配置了 FastJsonHttpMessageConverter 。

配置:

@Bean
    public HttpMessageConverters fastJsonConfigure(){
        FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat, 
              SerializerFeature.WriteNullStringAsEmpty,
              SerializerFeature.WriteMapNullValue,
              SerializerFeature.WriteNullListAsEmpty,
              SerializerFeature.WriteNullNumberAsZero);
        converter.setFastJsonConfig(fastJsonConfig);
        return new HttpMessageConverters(converter);
    }

然后 发现 Controller 里的参数 , LocalDateTime 类型的 在反序列化的时候 报错:

入参:

public class WorkReq implements Serializable{
    private static final long serialVersionUID = -7724964763310381651L;
   
    @JSONField( format = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
    private LocalDateTime endTimePage;
}

错误信息:

Caused by: com.alibaba.fastjson.JSONException: Text '2019-07-31T05:08:18.416Z' could not be parsed at index 23
	at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:665)
	at com.alibaba.fastjson.JSON.parseObject(JSON.java:365)
	at com.alibaba.fastjson.JSON.parseObject(JSON.java:333)
	at com.alibaba.fastjson.JSON.parseObject(JSON.java:296)
	at com.alibaba.fastjson.JSON.parseObject(JSON.java:402)
	at com.alibaba.fastjson.JSON.parseObject(JSON.java:484)
	at com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter.readType(FastJsonHttpMessageConverter.java:203)
	... 68 common frames omitted
Caused by: java.time.format.DateTimeParseException: Text '2019-07-31T05:08:18.416Z' could not be parsed at index 23
	at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
	at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
	at java.time.LocalDateTime.parse(LocalDateTime.java:492)
	at com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec.parseDateTime(Jdk8DateCodec.java:231)
	at com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec.deserialze(Jdk8DateCodec.java:86)
	at com.alibaba.fastjson.parser.deserializer.DefaultFieldDeserializer.parseField(DefaultFieldDeserializer.java:80)
	at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:745)
	at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:271)
	at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:267)
	at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:661)
	... 74 common frames omitted

就是这个样子了 。

前端参数:

{
  "endTimePage": "2019-07-31T05:08:18.416Z",
  "startTimePage": "2019-07-31T05:08:18.416Z"
}

开始上网搜索,其中两篇文章对我帮助很大
FastJsonHttpMessageConverter设置dateFormat后导致JSONField注解format失效解决办法https://blog.csdn.net/zxmsdyz/article/details/51680699

Spring Mvc使用Jackson进行json转对象时,遇到的字符串转日期的异常处理(Can not deserialize value of type Date from String)https://blog.csdn.net/qq906627950/article/details/79503801

最终 结合着文章 又看看源码 使得问题得以解决

 @JSONField( format = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
    private LocalDateTime endTimePage;

这样写 就可以了 。还有人说是版本问题 我的fastjson 版本是 1.2.47 已经很高了

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值