我试图从EJB调用REST服务,希望利用Jackson的
@JsonIgnoreProperties(ignoreUnknown = true)
以下是wlp v8.5.5.9
中的技巧Client client = ClientBuilder.newClient().register(JacksonJsonProvider.class);
相同的代码在wlp v16.0.0.2中生成NullPointerException
Caused by: java.lang.NullPointerException
at org.apache.cxf.jaxrs.impl.tl.ThreadLocalProviders.getContextResolver(ThreadLocalProviders.java:50)
at org.codehaus.jackson.jaxrs.JacksonJsonProvider.locateMapper(JacksonJsonProvider.java:634)
at org.codehaus.jackson.jaxrs.JacksonJsonProvider.readFrom(JacksonJsonProvider.java:413)
at org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBodyReader(JAXRSUtils.java:1356)
at org.apache.cxf.jaxrs.impl.ResponseImpl.doReadEntity(ResponseImpl.java:438)
... 98 more
我在v8.5.5.9中发现了discussions引发的相同问题,但我不确定它对我有什么帮助。正如我所说,我对v8.5.5.9中的代码没有任何麻烦
另一个discussion与Jackson v2.x有关。最初我使用了Jackson v1.9.13,但我试图切换到最新的Jeckson 2.8.0版本并应用提供的解决方案。相同的结果:应用程序在wlp 8.5.5.9中工作,并在v16.0.0.2中产生相同的错误。
有什么想法吗?
更新 通过扩展JacksonJsonProvider类并显式提供对象映射器
可以避免这个问题public class MyJacksonJsonProvider extends JacksonJsonProvider {
public MyJacksonJsonProvider() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibilityChecker(objectMapper.getVisibilityChecker().withFieldVisibility(JsonAutoDetect.Visibility.ANY));
objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
setMapper(objectMapper);
}
}
然后在客户端注册
Client client = ClientBuilder.newClient().register(MyJacksonJsonProvider.class);
然而,如果它是一个错误或一个功能,那将是很好的。