我继承了以下内容:
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会自动处理序列化/反序列化吗?
答案 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);