7

我正在使用 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"

如何将杰克逊的反序列化模式更改为非严格,以便它忽略新字段?

4

1 回答 1

11

要配置ObjectMapper与 Jersey 一起使用,您可以

  1. 创建一个ContextResolver如此处所示,并向客户端注册解析器。

    ClientConfig config = new DefaultClientConfig();
    config.register(new ObjectMapperContextResolver());
    Client client = Client.create(config);
    
  2. JacksonJsonProvider或将传入的实例ObjectMapper化为构造函数参数。然后向提供者注册Client

    ClientConfig config = new DefaultClientConfig();
    config.register(new JacksonJsonProvider(mapper));
    Client client = Client.create(config);
    

    请注意,如果您使用的是 JAXB 注释,则需要使用JacksonJaxbJsonProvider

要忽略未知属性,您可以在 上设置配置属性,如Sam BObjectMapper的链接所示。IE

mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

编辑

我在上面的例子中犯了一个错误。在Jersey 1.x没有register方法。ClientConfig相反,使用getSingletons().add(...). 有关更多信息,请参阅API

于 2015-07-08T14:47:30.167 回答