Spring OffsetDateTime以错误的格式返回日期时间
我使用Spring 4.3.4、Jackson 2.8.6和Tomcat 8.5.11。我有一些REST API:Spring OffsetDateTime以错误的格式返回日期时间,spring,datetime,jackson,Spring,Datetime,Jackson,我使用Spring 4.3.4、Jackson 2.8.6和Tomcat 8.5.11。我有一些REST API: @RestController @RequestMapping(value = "/netadvice") public class NetworkAdviceController { ... @RequestMapping( value = "/offsetDateTime", method = Request
@RestController
@RequestMapping(value = "/netadvice")
public class NetworkAdviceController {
...
@RequestMapping(
value = "/offsetDateTime",
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE)
public OffsetDateTime todayOffsetDateTime() {
return OffsetDateTime.now();
}
}
通话后,/netadvice/offsetDateTime
我希望收到以下格式的日期时间:2017-02-14T08:46:06.102Z
,但我收到这样的信息:1487062454.957000000
我做错了什么?如何解决此问题?
以下代码是我的自定义日期时间序列化程序和反序列化程序:
@Configuration
public class JsonConfig {
public static final DateTimeFormatter FORMATTER = ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
@Bean
@Primary
public ObjectMapper objectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
JavaTimeModule javaTimeModule = new JavaTimeModule();
javaTimeModule.addSerializer(OffsetDateTime.class, new OffsetDateTimeSerializer());
javaTimeModule.addDeserializer(OffsetDateTime.class, new OffsetdateTimeDeserializer());
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
objectMapper.registerModule(javaTimeModule);
return objectMapper;
}
public class OffsetDateTimeSerializer extends JsonSerializer<OffsetDateTime> {
@Override
public void serialize(OffsetDateTime value, JsonGenerator gen, SerializerProvider serializers)
throws IOException {
gen.writeString(value.format(FORMATTER));
}
}
public class OffsetdateTimeDeserializer extends JsonDeserializer<OffsetDateTime> {
@Override
public OffsetDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
return OffsetDateTime.parse(p.getValueAsString(), FORMATTER);
}
}
}
@配置
公共类JsonConfig{
公共静态最终日期TimeFormatter FORMATTER=of模式(“yyyy-MM-dd'HH:MM:ss.SSSXXX”);
@豆子
@初级的
公共对象映射器对象映射器(){
ObjectMapper ObjectMapper=新的ObjectMapper();
JavaTimeModule JavaTimeModule=新的JavaTimeModule();
addSerializer(OffsetDateTime.class,新的OffsetDateTimeSerializer());
addDeserializer(OffsetDateTime.class,新的OffsetdateTimeDeserializer());
configure(SerializationFeature.WRITE_DATES_作为时间戳,false);
registerModule(javaTimeModule);
返回对象映射器;
}
公共类OffsetDateTimeSerializer扩展JsonSerializer{
@凌驾
公共void序列化(OffsetDateTime值、JsonGenerator gen、SerializerProvider序列化器)
抛出IOException{
gen.writeString(value.format(格式化程序));
}
}
公共类OffsetdateTimeDeserializer扩展JsonDeserializer{
@凌驾
公共OffsetDateTime反序列化(JsonParser p,DeserializationContext ctxt)引发IOException{
返回OffsetDateTime.parse(p.getValueAsString(),格式化程序);
}
}
}
使用JavaTimeModule
您不需要自定义序列化程序和反序列化程序。只需删除它们。我刚刚删除了自定义序列化程序和反序列化程序,但不幸的是,它不能正常工作。我刚刚注意到,如果使用Spring引导,我的代码可以正常工作。