我正在使用 jackson 2.10.0 ( https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core/2.10.0 ),以下是一個簡單的測試用例Person類的定義如下,對于setter,我使用了@JsonSetter注解,而對于getter沒有使用@JsonGetter,import com.fasterxml.jackson.annotation.JsonProperty;public class Person { private String firstName; private String lastName; public String getFirstName() { return firstName; } @JsonSetter("first_name") public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } @JsonSetter("last_name") public void setLastName(String lastName) { this.lastName = lastName; }}然后,我創建一個 Person 對象,并將其序列化為字符串,import com.fasterxml.jackson.databind.ObjectMapper;public class Person3Test2 { public static void main(String[] args) throws Exception { Person p = new Person(); p.setFirstName("abc"); p.setLastName("def"); String str = new ObjectMapper().writeValueAsString(p); System.out.println(str); }}它會調用 Person 的 getter,因為它不使用 @JsonGetter,所以我認為輸出應該是{"firstName":"abc","lastName":"def"}但是,我驚訝地發現它是:{"first_name":"abc","last_name":"def"}看來 @JsonSetter 影響了 getter 輸出,我想問這里的行為是什么。
1 回答

慕容森
TA貢獻1853條經驗 獲得超18個贊
@JsonSetter
會在序列化期間生效,這也是 github 問題,如果你想要不同的名稱,只需@JsonGetter
在get
方法上使用另一個注釋
文檔可能有誤;@JsonSetter 不僅影響反序列化。雖然它確實可以用于非對稱命名(類似于 @JsonProperty 本身帶有“split”注釋),但它的范圍不受限制??赡茉谀硞€時候是這樣,但是在統一屬性處理之后(在 1.8 左右),各種屬性訪問器之間的分離程度減少了。
我可以查看 Javadoc 來明確指出,沒有任何注釋的范圍受到嚴格限制——有些注釋可能只與其中之一相關,但沒有一個注釋是有意分開的。
添加回答
舉報
0/150
提交
取消