首页 前端知识 Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cann

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

2024-05-05 22:05:00 前端知识 前端哥 954 91 我要收藏

问题

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

        // 将 LocalDateTime 对象格式化为输出日期字符串,并指定时区为东八区
        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

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

转载请注明出处或者链接地址:https://www.qianduange.cn//article/7108.html
评论
发布的文章

JQuery中的load()、$

2024-05-10 08:05:15

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!