如何在Jersey 1.0 http-client中将Jackson ObjectMapper设置为NON_STRICT

时间:2015-07-08 13:56:30

标签: java json jersey jackson jersey-1.0

我正在使用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,以便忽略新字段?

1 个答案:

答案 0 :(得分:4)

要配置ObjectMapper以便与泽西岛一起使用,您可以

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

    ClientConfig config = new DefaultClientConfig();
    config.register(new ObjectMapperContextResolver());
    Client client = Client.create(config);
    
  2. OR实例化JacksonJsonProvider作为构造函数参数传递ObjectMapper。然后使用Client

    注册提供商
    ClientConfig config = new DefaultClientConfig();
    config.register(new JacksonJsonProvider(mapper));
    Client client = Client.create(config);
    

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

  3. 要忽略未知属性,可以在ObjectMapper上设置配置属性,如link from Sam B.所示。即

    mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    

    修改

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