2015-07-13 41 views
4

我繼承了以下內容:訪問器方法需要@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

回答

4

在你的榜樣,並用默認ObjectMapper設置,應該不需要註釋,當使用傑克遜1.8或更新。 (例如「public int getValue()」),setters(「public void setValue(int v);」和fields(「public int value;」)。 此外,Jackson還可以自動檢測屬性,只要一個公共的setter,getter或現場被發現,然後匹配,但(否則)不可見也包括二傳手/場。但

注意的是,與老傑克遜版本(1.7及更早版本)沒有做第二部分,並且需要公開所有setter和getter。

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);