Java 8 WebSphereLiberty中的java8时间反序列化

Java 8 WebSphereLiberty中的java8时间反序列化,java-8,ibm-cloud,websphere-liberty,Java 8,Ibm Cloud,Websphere Liberty,我的Websphere Liberty安装/IBM Bluemix实例遇到问题。我正在使用新的java.time类,例如LocalDateTime,但是使用Jackson 2.8映射器的反序列化版本会导致不易处理的结果—完全对象反序列化而不是时间戳。 但在自由中我怎么能做同样的事呢? e、 g:接收2016-02-02T23:24:08.255+01:00作为反序列化JSON响应的结果 感谢Liberty JAX-RS 2.0功能包括Jackson,用于将Java类基本序列化为JSON,但它没有

我的Websphere Liberty安装/IBM Bluemix实例遇到问题。我正在使用新的java.time类,例如LocalDateTime,但是使用Jackson 2.8映射器的反序列化版本会导致不易处理的结果—完全对象反序列化而不是时间戳。 但在自由中我怎么能做同样的事呢? e、 g:接收2016-02-02T23:24:08.255+01:00作为反序列化JSON响应的结果


感谢

Liberty JAX-RS 2.0功能包括Jackson,用于将Java类基本序列化为JSON,但它没有公开任何Jackson API

如果你想改变Jackson的行为,你应该在你的应用程序中捆绑这些库,以便Liberty使用你提供的Jackson,而不是它内部的Jackson:

然后,您还可以包括,以根据需要将Java序列化8次

但是,根据该页面上的文档,您需要向对象映射器注册模块

您想调用JacksonJsonProvider.setMapper,但这并不是严格意义上的,因为Liberty通常会自动实例化此对象,您永远看不到它

相反,您可以创建一个ContextProvider,告诉Jackson JAX-RS提供程序在Liberty实例化ObjectMapper时要使用什么ObjectMapper

根据链接中的示例,您可以编写如下内容:

@Provider
public class JSR310MapperProvider implements ContextResolver<ObjectMapper> {

    @Override
    public ObjectMapper getContext(Class<?> type) {
        ObjectMapper mapper = new ObjectMapper();
        mapper.registerModule(new JavaTimeModule());
        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
        return mapper;
    }
}
这将创建一个配置好的映射器,然后Jackson将使用它来序列化Java8时间对象

更新:如果您在应用程序类中重写GetClass,则不会自动发现JacksonJsonProvider和JSR310MapperProvider。您需要将这两个类都包含在从GetClass返回的集合中

在发布查询之前,先完成此[如何询问]并浏览一番