jjd*_*jjd 6 jax-rs jackson websphere-liberty
我试图从EJB调用REST服务,希望利用Jackson的
@JsonIgnoreProperties(ignoreUnknown = true)
Run Code Online (Sandbox Code Playgroud)
以下是wlp v8.5.5.9中的技巧
Client client = ClientBuilder.newClient().register(JacksonJsonProvider.class);
Run Code Online (Sandbox Code Playgroud)
相同的代码NullPointerException在wlp v16.0.0.2中生成a
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
Run Code Online (Sandbox Code Playgroud)
我在v8.5.5.9中找到了由相同问题引发的讨论,但我不确定它是如何帮助我的.正如我所说,我对v8.5.5.9中的代码没有任何麻烦
另一个讨论与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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后在客户端注册它
Client client = ClientBuilder.newClient().register(MyJacksonJsonProvider.class);
Run Code Online (Sandbox Code Playgroud)
但是,如果它是一个错误或一个功能,那将很高兴.
| 归档时间: |
|
| 查看次数: |
937 次 |
| 最近记录: |