我正在使用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的反序列化模式更改为NON-STRICT,以便忽略新字段?
答案 0 :(得分:4)
要配置ObjectMapper
以便与泽西岛一起使用,您可以
创建一个ContextResolver
,如here所示,并向客户注册解析器。
ClientConfig config = new DefaultClientConfig();
config.register(new ObjectMapperContextResolver());
Client client = Client.create(config);
OR实例化JacksonJsonProvider
作为构造函数参数传递ObjectMapper
。然后使用Client
ClientConfig config = new DefaultClientConfig();
config.register(new JacksonJsonProvider(mapper));
Client client = Client.create(config);
注意,如果您使用的是JAXB注释,则需要使用JacksonJaxbJsonProvider
要忽略未知属性,可以在ObjectMapper
上设置配置属性,如link from Sam B.所示。即
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
修改强>
我在上面的例子中犯了一个错误。 Jersey 1.x中的register
没有ClientConfig
方法。相反,请使用getSingletons().add(...)
。有关详细信息,请参阅API。