访问器方法是否需要@JsonProperty注释?

时间:2015-07-13 10:52:34

标签: java jackson

我继承了以下内容:

import com.fasterxml.jackson.annotation.JsonProperty;
public class MyClass {
  @JsonProperty("id")
  private String id;

  @JsonProperty("id")
  public String getId(){
    ...code...
  }

  @JsonProperty("id")
  public String setId(String id) {
    ...code...
  }
}

getter和setter是否需要重复的JsonProperty注释,或者如果我只注释私有成员,jackson会自动处理序列化/反序列化吗?

2 个答案:

答案 0 :(得分:4)

在您的示例中,使用默认ObjectMapper设置时,在使用Jackson 1.8或更新版本时,不需要注释。

Jackson可以自动检测来自公共getter的属性(如“public int getValue()”),setters(“public void setValue(int v);”和fields(“public int value;”))。 此外,只要找到一个公共setter,getter或field,就会包含匹配但(否则)不可见的setter / field。

但请注意,旧杰克逊版本(1.7及更早版本)没有做第二部分,并且需要公开和吸气者才能公开。

答案 1 :(得分:2)

你绝对不需要所有@jsonProperty。杰克逊映射器可以根据吸气剂或私人成员初始化为sereliazie /反序列化,您当然只需要您正在使用的那个。默认情况下,它是由getters。

按成员定义映射器:

    ObjectMapper mapper = new ObjectMapper();
    mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
    mapper.disable(MapperFeature.AUTO_DETECT_GETTERS);

无论如何我还建议添加这个定义:

   mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);