解决 JSON parse error: Cannot deserialize value of type
的问题
在使用 Feign 进行服务间通信时,可能会遇到 JSON parse error: Cannot deserialize value of type
异常,特别是在解析 JSON 响应时。例如,以下异常信息提示了一个关于日期格式的问题:
问题原因
该异常的根本原因是尝试将 JSON 字符串 "2024-09-19 10:40:43"
反序列化为 java.util.Date
类型时,Jackson 无法识别该格式。默认情况下,Jackson 使用 yyyy-MM-dd'T'HH:mm:ss.SSSZ
格式来解析日期,而我们的日期字符串不符合这个格式。
解决方案
-
更改日期格式:确保返回的 JSON 中的日期格式符合 Jackson 的默认格式,或使用自定义格式。
-
自定义反序列化:在
UserDto
类中,使用@JsonFormat
注解指定正确的日期格式。例如:@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date pwdResetTime;
-
全局配置:在 Spring Boot 的配置中,全局设置 Jackson 的日期格式:
@Bean public ObjectMapper objectMapper() { ObjectMapper mapper = new ObjectMapper(); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); return mapper; }