访问器方法需要@JsonProperty注解吗?
问题描述:
我继承了以下内容:访问器方法需要@JsonProperty注解吗?
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注释,或将杰克逊处理序列化/反序列化自动如果我只注释的私有成员?
答
在你的榜样,并用默认ObjectMapper
设置,应该不需要注释,当使用杰克逊1.8或更新。 (例如“public int getValue()”),setters(“public void setValue(int v);”和fields(“public int value;”)。 此外,Jackson还可以自动检测属性,只要一个公共的setter,getter或现场被发现,然后匹配,但(否则)不可见也包括二传手/场。但
注意的是,与老杰克逊版本(1.7及更早版本)没有做第二部分,并且需要公开所有setter和getter。
答
你肯定不需要所有那些@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);
这些获取者和设置者是否真的是私有的? – chrylis
你可以只在私有变量上注释 – shazin
@chrylis - 他们不是mea nt是。已更新。 – edwardmlyte