2015-02-05 39 views
0

我有一個對象,並且當我使用對象映射器將對象轉換爲字符串並將其返回時。除了這個對象的屬性之外,我還發現了一個額外的鍵。例如在Java中將對象轉換爲JSON時出現額外的意外部分

public class Person(){ 

private int age; 
private String firstName; 
private String lastName; 

setter and getter for those properties above, 


public String getFullName(){ 

return this.firstName + this.lastName; 
} 



} 

爲什麼我爲這個人類獲得的JONS包含一個名爲FullName的鍵?爲什麼我可以得到那個?是因爲Java找到了fullName的getter並自動考慮FullName是一個屬性,所以當我從Person對象轉換爲JSON時,它會添加它?

+0

您正在使用哪種映射器?傑克遜?問題在於它使用你的getter和setter的序列化程序,因爲那是映射該方法。 – facundofarias 2015-02-05 18:53:53

+0

@facundofarias我使用了ObjectMapper com.fasterxml.jackson.databind.ObjectMapper; – Terry 2015-02-05 19:00:43

回答

-1

我覺得ObjectMapper也考慮吸氣序列化,所以如果你只想要序列字段,那麼你可以創建一個像吹映射對象

ObjectMapper mapper = new ObjectMapper();             
    mapper.setVisibility(PropertyAccessor.ALL, Visibility.NONE); 
    mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY); 

或者,還有另一種方式來做到它可以在要序列化的類中指定註釋。在類之前添加以下注釋

@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE) 
1

Jackson將正常序列化所提供的POJO上的所有getter方法(除非另有配置)。要忽略fullName財產的系列化索性就消氣方法添加@JsonIgnore

@JsonIgnore 
public String getFullName() { 
    return this.firstName + this.lastName; 
} 

JavaDocs

標記註釋,表明該批註的方法或字段由introspection-被忽略基於序列化和反序列化功能。也就是說,它不應該被認爲是「吸氣劑」,「制定者」或「創造者」。

因此,基本上這意味着標記爲@JsonIgnore的所有方法或字段在序列化和反序列化中將被忽略。

相關問題