亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

杰克遜@JsonGetter和@JsonSetter如何工作

杰克遜@JsonGetter和@JsonSetter如何工作

縹緲止盈 2024-01-05 09:55:22
我正在使用 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 問題,如果你想要不同的名稱,只需@JsonGetterget方法上使用另一個注釋

文檔可能有誤;@JsonSetter 不僅影響反序列化。雖然它確實可以用于非對稱命名(類似于 @JsonProperty 本身帶有“split”注釋),但它的范圍不受限制??赡茉谀硞€時候是這樣,但是在統一屬性處理之后(在 1.8 左右),各種屬性訪問器之間的分離程度減少了。

我可以查看 Javadoc 來明確指出,沒有任何注釋的范圍受到嚴格限制——有些注釋可能只與其中之一相關,但沒有一個注釋是有意分開的。


查看完整回答
反對 回復 2024-01-05
  • 1 回答
  • 0 關注
  • 226 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號