繁体   English   中英

Websphere Liberty中的Java8时间反序列化

[英]java8 time deserialization in Websphere Liberty

我的Websphere Liberty安装/ IBM Bluemix实例遇到问题。 我正在使用新的java.time类(例如LocalDateTime),但是使用Jackson 2.8映射器的反序列化版本会导致处理不佳的结果(完全对象反序列化而不是时间戳)。 https://geowarin.github.io/jsr310-dates-with-jackson.html但是如何在Liberty中做同样的事情? 例如:在反序列化JSON响应中收到2016-02-02T23:24:08.255 + 01:00

谢谢

Liberty JAX-RS 2.0功能包括Jackson进行Java类到JSON的基本序列化,但是它没有公开任何Jackson API。

如果要更改Jackson的行为,则应将这些库捆绑在应用程序中,以便Liberty使用您提供的Jackson,而不是内部提供的Jackson:

然后,您还可以包含Jackson JSR310模块,以根据需要对Java进行8次序列化。

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

您想调用JacksonJsonProvider.setMapper()但这并不是很简单,因为通常该对象会由Liberty自动实例化,而您再也看不到它。

相反,您可以创建一个ContextProvider来告诉Jackson Jackson X-RS提供程序,当Liberty实例化它时要使用哪个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可以使用它来序列化Java 8时间对象。


更新:如果要在Application类中重写getClasses() ,则将不会自动发现JacksonJsonProviderJSR310MapperProvider 您需要将这两个类都包含在从getClasses()返回的集合中

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM