java - 如何为 Jersey 1.0 客户端设置自定义 Jackson ObjectMapper

标签 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,以便它忽略新字段?

最佳答案

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

  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

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

mapper.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/

相关文章:

java - 为 ant javac 任务使用系统类路径

jersey - 在 Jersey 中删除添加的提供程序

java - Weblogic 配置错误 - 未找到 Java 类、Java 类型类和 MIME 媒体类型 application/json 的消息正文编写器

unit-testing - 如何在 Jersey 单元测试框架 2.5 中设置 Servlet 上下文

java - Google 图表 API JSON 无效

java - 为什么我的菜单栏不显示?

java - JPA : Create multiple parent, GAE 上的独生子女关系

javascript - Internet Explorer 8 中未定义的 JSON 对象

java - 嵌套json用java转换非嵌套域

python - 如何使用 Kubernetes Python 客户端创建 secret ?