at [source: (org.springf">
当前位置:   article > 正文

Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cann_expected format "yyyy-mm-dd hh:mm:ss" at [sou

expected format "yyyy-mm-dd hh:mm:ss" at [source: (org.springf

问题

Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `java.sql.Timestamp` from String "2024-02-20 19:34:16.0": expected format "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
  • 1

详细问题

笔者进行Android项目开发,客户端请求所传递参数含Timestamp类型数据,使用com.fasterxml.jackson对JSON数据进行解析,控制台报错,详细报错如下:

2024-02-20 19:34:34.955  WARN 34104 --- [nio-9090-exec-4] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `java.sql.Timestamp` from String "2024-02-20 19:34:16.0": expected format "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"; nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `java.sql.Timestamp` from String "2024-02-20 19:34:16.0": expected format "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"<EOL> at [Source: (PushbackInputStream); line: 9, column: 19] (through reference chain: com.qingge.springboot.entity.User["createTime"])]
  • 1

解决方案

将日期格式化:

public static String convertDateFormat(String inputDate) {
        // 定义输入日期格式和输出日期格式
        DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S");
        DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSX");

        // 将输入日期字符串解析为 LocalDateTime 对象
        LocalDateTime dateTime = LocalDateTime.parse(inputDate, inputFormatter);

        // 将 LocalDateTime 对象格式化为输出日期字符串,并指定时区为东八区
        return dateTime.atZone(ZoneId.of("Asia/Shanghai")).format(outputFormatter);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

产生原因

问题产生的原因是在客户端向服务器发送请求时,传递的JSON数据中包含了Timestamp类型的数据,并且这些数据的格式与服务器端预期的格式不匹配。具体来说,服务器端期望接收的Timestamp类型数据格式为"yyyy-MM-dd’T’HH:mm:ss.SSS’Z’“,但实际传递的数据格式为"yyyy-MM-dd HH:mm:ss.S”。

由于JSON数据在传输过程中需要进行反序列化操作,服务器端使用Jackson库进行JSON数据的反序列化。然而,Jackson库无法将实际传递的数据格式"yyyy-MM-dd HH:mm:ss.S"转换为服务器端期望的格式"yyyy-MM-dd’T’HH:mm:ss.SSS’Z’",导致反序列化失败,进而抛出了HttpMessageNotReadableException异常。

解决原因

为了解决这个问题,开发者需要在客户端对日期数据进行格式化,将其转换为服务器端期望的格式"yyyy-MM-dd’T’HH:mm:ss.SSS’Z’",以保证数据的一致性和可解析性。上述提供的解决方案中,通过convertDateFormat方法将日期格式化为符合服务器端期望格式的字符串,并且指定时区为东八区(即"Asia/Shanghai"时区),以确保数据的正确性。

参考文献

产生原因与解释原因部分 部分内容参考chatgpt

原创不易
转载请标明出处
如果对你有所帮助 别忘啦点赞支持哈
请添加图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/813847
推荐阅读
相关标签
  

闽ICP备14008679号