我正在使用 jackson 2.10.0 ( https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core/2.10.0 ),以下是一個(gè)簡(jiǎn)單的測(cè)試用例Person類的定義如下,對(duì)于setter,我使用了@JsonSetter注解,而對(duì)于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; }}然后,我創(chuàng)建一個(gè) Person 對(duì)象,并將其序列化為字符串,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); }}它會(huì)調(diào)用 Person 的 getter,因?yàn)樗皇褂?@JsonGetter,所以我認(rèn)為輸出應(yīng)該是{"firstName":"abc","lastName":"def"}但是,我驚訝地發(fā)現(xiàn)它是:{"first_name":"abc","last_name":"def"}看來 @JsonSetter 影響了 getter 輸出,我想問這里的行為是什么。
1 回答

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