我正在使用 Jersey 1.0 http-client 调用资源并反序列化响应 JSON,如下所示:
Client client = Client.create(new DefaultClientConfig())
ClientResponse clientResponse = client.resource("http://some-uri").get(ClientResponse.class)
MyJsonRepresentingPOJO pojo = clientResponse.getEntity(MyJsonRepresentingPOJO.class)
现在响应 JSON 有一些新字段,我收到以下异常:
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "xyz"
如何将 jackson 的反序列化模式更改为非严格,以便它忽略新字段?
最佳答案
要配置用于 Jersey 的 ObjectMapper
,您可以
ContextResolver
,如 here 所示,并向客户端注册解析器。ClientConfig config = new DefaultClientConfig();
config.register(new ObjectMapperContextResolver());
Client client = Client.create(config);
JacksonJsonProvider
的ObjectMapper
作为构造函数参数。然后使用 Client
注册提供者ClientConfig config = new DefaultClientConfig();
config.register(new JacksonJsonProvider(mapper));
Client client = Client.create(config);
请注意,如果您使用 JAXB 注释,则需要使用
JacksonJaxbJsonProvider
要忽略未知属性,您可以在
ObjectMapper
上设置配置属性,如 link from Sam B. 所示。 IEmapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
编辑
我在上面的例子中犯了一个错误。 Jersey 1.x 中没有
register
的 ClientConfig
方法。相反,使用 getSingletons().add(...)
。有关更多信息,请参阅 API。关于java - 如何为 Jersey 1.0 客户端设置自定义 Jackson ObjectMapper,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31294899/