Spring Boot Feign Client java.util.Date日期解析异常原因咨询
问题描述
使用FeignClient调用包含java.util.Date类型的服务时,抛出如下异常:
org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: java.time.format.DateTimeParseException: Text '1692738000000' could not be parsed at index 0
相关代码定义如下:
DTO类:
public class InputDto { private Date startDate; private Date endDate; }
FeignClient服务接口:
@PostMapping(value = {"/searchFile"}, produces = {MediaType.APPLICATION_JSON_VALUE}) ResponseEntity<ServiceResponse<List<FileDto>>> searchFile(@RequestBody InputDto searchDto);
将DTO中的日期字段改为java.time.LocalDate时,调用无异常,需明确该问题的产生原因。
原因分析
- Jackson对两种日期类型的反序列化逻辑存在差异:
Spring默认使用Jackson处理JSON序列化与反序列化。对于java.util.Date,Jackson的默认规则仅支持直接解析数字类型的时间戳(如1692738000000);若服务端返回的是字符串形式的时间戳(如"1692738000000"),Jackson会尝试用默认日期格式(如yyyy-MM-dd)解析该字符串,匹配失败后抛出异常。 java.time.LocalDate的解析兼容性更强:
处理Java 8日期API的JavaTimeModule模块,支持将字符串形式的数字转换为时间戳,再解析为LocalDate,因此能兼容服务端返回的字符串时间戳格式。- 服务端序列化格式是核心触发点:
本质原因是服务端将日期字段序列化成了带引号的字符串时间戳,而非原始数字类型。这种格式无法被java.util.Date的默认解析规则处理,但LocalDate的解析逻辑可以适配。
内容的提问来源于stack exchange,提问作者kernel
相关产品推荐
相关产品推荐

