Spring OffsetDateTime以错误的格式返回日期时间

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

我使用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 = 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引导,我的代码可以正常工作。