如何告诉Jersey客户端在它反序列化的每个类上执行等效的@JsonIgnoreProperties(ignoreUnknown = true)?

Dan*_*lan 4 java jaxb jackson jersey-client jersey-1.0

我有一个类,我正在使用Jersey客户端进行反序列化.这个类有一个如下所示的方法:

public boolean isEmpty() {
    return (code == null &&
            label == null &&
            codeSystem == null &&
            codeSystemLabel == null &&
            description == null &&
            concept == null &&
            alternateCode == null
    );
Run Code Online (Sandbox Code Playgroud)

没有二传手.原样,这将抛出此异常:

com.sun.jersey.api.client.ClientHandlerException: org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "empty" (Class com.app.models.CodedElementModel), not marked as ignorable
 at [Source: sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@3b927d51; line: 1, column: 270] (through reference chain: com.app.models.LabOrderModel["code"]->com.app.models.CodedElementModel["empty"])
Run Code Online (Sandbox Code Playgroud)

我已经阅读了这篇文章,事实证明我可以通过在CodedElementModel类中添加这个注释来解决这个问题:@JsonIgnoreProperties(ignoreUnknown = true).

问题是我有很多方法抛出这个异常.有没有办法配置Jersey客户端就像@JsonIgnoreProperties(ignoreUnknown = true)在每个类上设置一样,所以我不必手动注释它们?我不想通过手动添加此注释来更改~30个文件.如果有人在没有setter的情况下添加getter,这将在将来防止此类错误.

以下是我创建Jersey客户端的方法:

    DefaultClientConfig clientConfig = new DefaultClientConfig();
    clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
    Client client = Client.create(clientConfig);
Run Code Online (Sandbox Code Playgroud)

我觉得这clientConfig可能有一个设置来做到这一点,但我不知道如何找到它.

Bri*_*ach 8

您需要通过实例化和配置JacksonJsonProviderJersey 来配置它Client.

泽西岛V2.x:

JacksonJsonProvider jacksonJsonProvider = 
    new JacksonJaxbJsonProvider()
        .configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);

client.register(jacksonJsonProvider);
Run Code Online (Sandbox Code Playgroud)

泽西岛V1.x:

DefaultClientConfig clientConfig = new DefaultClientConfig();
JacksonJsonProvider jacksonJsonProvider = new JacksonJaxbJsonProvider().
    configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
clientConfig.getSingletons().add(jacksonJsonProvider);
Run Code Online (Sandbox Code Playgroud)

值得注意的是,潜在的问题是你的JSON包含字段"空"......我假设它已经到了那里,因为你正在序列化相同的POJO.isEmpty()如果您实际上不希望它在JSON中更好,那么不会注释该序列被忽略的序列化吗?