java我如何告诉Jersey客户端对其反序列化的每个类执行@JsonIgnoreProperties(ignoreUnknown=true)的等效操作?
我用Jersey客户端反序列化了一个类。此类有一个如下所示的方法:
public boolean isEmpty() {
return (code == null &&
label == null &&
codeSystem == null &&
codeSystemLabel == null &&
description == null &&
concept == null &&
alternateCode == null
);
没有二传手。按原样,这将引发以下异常:
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"])
I've read this article,事实证明我可以通过把这个注释放在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);
我觉得clientConfig
可能有这样的设置,但我不确定如何找到它
# 1 楼答案
您需要通过为Jersey
Client
实例化和配置JacksonJsonProvider
来配置它泽西2号。x:
泽西V1。x:
值得注意的是,根本问题是JSON包含字段“empty”。。。我想它之所以能达到目的,是因为你正在序列化同一个POJO。如果你真的不想在JSON中使用
isEmpty()
方法,那么注释该方法在序列化时被忽略不是更好吗# 2 楼答案
接受了@sleske的回复,但在我使用com时,对我来说并不适用。太阳运动衫应用程序编程接口。客户客户端和com。fasterxml。杰克逊。贾克斯。json。JacksonJsonProvider。实际上对我有用的是
干杯
# 3 楼答案
在客户端使用REST服务时,我遇到了同样的问题。以下是我的解决方案:
1)将
com.fasterxml.jackson.jaxrs
添加到POM中,或将jar包含在项目中2)修改ClientConfig:
# 4 楼答案
您还可以构造自定义ObjectMapper,并使用它将其传入
有了这种maven依赖
如本文所述https://jersey.java.net/documentation/latest/migration.html#mig-1-x-json