【问题标题】:How to set a custom Jackson ObjectMapper for Jersey 1.0 client如何为 Jersey 1.0 客户端设置自定义 Jackson ObjectMapper
【发布时间】:2015-09-26 11:53:13
【问题描述】:

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

【问题讨论】:

标签: java json jersey jackson jersey-1.0


【解决方案1】:

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

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

    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

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

mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

编辑

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

【讨论】:

  • jersey-client-1.18.jar中的ClientConfig类没有register()方法...
  • 对不起,我已经习惯使用 Jersey 2.x。请参阅Javadoc。你应该可以使用getSingletons().add(...)
猜你喜欢
  • 2013-09-23
  • 1970-01-01
  • 2016-06-21
  • 2019-11-12
  • 1970-01-01
  • 2019-09-23
  • 2015-08-16
  • 2012-05-12
  • 1970-01-01
相关资源
最近更新 更多