访问器方法需要@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注释,或将杰克逊处理序列化/反序列化自动如果我只注释的私有成员?

+2

这些获取者和设置者是否真的是私有的? – chrylis

+0

你可以只在私有变量上注释 – shazin

+0

@chrylis - 他们不是mea nt是。已更新。 – edwardmlyte

在你的榜样,并用默认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);