Java 未调用Json LocalDate反序列化程序 未调用LocalDateDeserializer。
我决定将我的日期对象传输到前端,从epoch开始,传输时间为毫秒。我已经编写了一个序列化程序将LocalDate对象转换为自epoch以来的长毫秒,并编写了一个反序列化程序将从json获得的长值转换回LocalDate 在客户端,我根据这个值创建了一个JS Date对象,并将日期对象转换回毫秒,因为我想将对象发送回服务器 序列化程序和反序列化程序 问题 序列化程序按其应有的方式调用,但反序列化程序不是。我得到了这个错误:Java 未调用Json LocalDate反序列化程序 未调用LocalDateDeserializer。,java,json,serialization,jackson,Java,Json,Serialization,Jackson,我决定将我的日期对象传输到前端,从epoch开始,传输时间为毫秒。我已经编写了一个序列化程序将LocalDate对象转换为自epoch以来的长毫秒,并编写了一个反序列化程序将从json获得的长值转换回LocalDate 在客户端,我根据这个值创建了一个JS Date对象,并将日期对象转换回毫秒,因为我想将对象发送回服务器 序列化程序和反序列化程序 问题 序列化程序按其应有的方式调用,但反序列化程序不是。我得到了这个错误: nested exception is com.fasterxml.jac
nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate value of type [simple type, class java.time.LocalDate] from String value ('-30610224561000'); no single-String constructor/factory method
补充资料
我没有使用JavaTimeModule,因为我使用的是旧版本的Jackson,以便与其他依赖项保持兼容
我试图不使用注释,因为域模型位于一个单独的maven模块中,并试图对其进行尽可能小的更改
如果您需要更多信息,请随时发表评论 我们面临着同样的问题。只有在显式添加@JsonDeserialize注释时,才会调用它。。这相当令人失望:)
public class LocalDateDeserializer extends JsonDeserializer<LocalDate> {
@Override
public LocalDate deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
//Parsing json to LocalDate.
Long sinceEpoch = Long.parseLong(jsonParser.getValueAsString());
return Instant.ofEpochMilli(sinceEpoch).atZone(ZoneId.systemDefault()).toLocalDate();
}
@Bean
@Primary
public ObjectMapper jsonObjectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
JSR310Module dateModule = new JSR310Module();
dateModule.addSerializer(LocalDate.class, new LocalDateSerializer());
dateModule.addDeserializer(LocalDate.class, new LocalDateDeserializer());
SimpleModule valueTypeModule = new SimpleModule();
valueTypeModule.addDeserializer(AbstractValueType.class, new ValueTypeDeserializer());
objectMapper.registerModule(dateModule);
objectMapper.registerModule(valueTypeModule);
return objectMapper;
}
nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate value of type [simple type, class java.time.LocalDate] from String value ('-30610224561000'); no single-String constructor/factory method