如何设置我的POJO,以便在没有@JsonIgnoreProperites的情况下,jersey将填充私有字段

时间:2013-11-25 18:24:29

标签: java json jersey jackson

我正在尝试建立一个非常基本的客户端,使用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(它只是使类型值也不起作用)。这真的不是一个很好的方式吗?

1 个答案:

答案 0 :(得分:0)

查看@JsonAutoDetect注释:它可用于更改可见性设置,以便检测到非公开的Field。您也可以将ObjectMapper配置为使用不同的全局默认值(方法类似于setVisibility())。