Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cann

15,247次阅读
没有评论

共计 2031 个字符,预计需要花费 6 分钟才能阅读完成。

问题

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'"

详细问题

笔者进行 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"])]

解决方案

将日期格式化:

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 dateTime = LocalDateTime.parse(inputDate, inputFormatter);

        
        return dateTime.atZone(ZoneId.of("Asia/Shanghai")).format(outputFormatter);
    }

产生原因

问题产生的原因是在客户端向服务器发送请求时,传递的 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

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

原文地址: Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cann

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-09-30发表,共计2031字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)