我正在尝试建立一个非常基本的客户端,使用jersey / jackson从一个安静的界面获取json回复。我也没什么经验。经过一些令人沮丧的试验和试图让我的Pojo填充错误我得知它只会自动填充一个没有设置@JsonIgnoreProperties的变量,如果该变量是公共的。
现在我希望我的回复能够变为不可变,只是为了尊重正确的编程习惯。但是,我不想将@JsonIgnoreProperties注释添加到单个变量中,这会让人感到沮丧。如果变量名称与json字段匹配,是否有一些更简单的方法可以告诉jackson填充所有变量,甚至是私有变量。
我不知道它是如何工作的,但下面是我在尝试设置时使用的快速测试代码的示例。我不得不手工编写而不是复制/粘贴,所以请原谅任何拼写错误。
我的客户:
Client client;
public myClient(){
DefaultClientConfig clientConfig=new DefaultClientConfig();
ClientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING), true);
client=Client.create(clientConfig);
}
getTest(){
WebResource resource=client.resource(getTestURL());
Object result=resource.accept(MediaType.APPLICATION_JSON).get(TestEntry.class);
String stringResult=resource.accept(MediaType.APPLICATION_JSON).get(String.class);
System.out.println("result: "+result);
System.out.println("originalResult: "+result);
}
TestEntry类:
@JsonIgnoreProperties(ignoreUnknown=true)
public clas TestEntry extends JsonEntry{
@JsonProperty("type")
String type;
String rate
}
JsonEntry是一个带有Gson静态对象和toString方法的类,它使用GSon将类输出为json。它还将JsonIgnoreProperties设置为false,但它不执行任何其他操作
输出:
result: {"type":"typeValue"}
originalResult: {"type": "typeValue", "rate": "rateValue"}
我尝试了多次尝试但没有成功,包括尝试创建和加载contextResolver(它只是使类型值也不起作用)。这真的不是一个很好的方式吗?
答案 0 :(得分:0)
查看@JsonAutoDetect
注释:它可用于更改可见性设置,以便检测到非公开的Field
。您也可以将ObjectMapper
配置为使用不同的全局默认值(方法类似于setVisibility()
)。