簡體   English   中英

@JsonProperty對字段的注釋以及getter / setter

[英]@JsonProperty annotation on field as well as getter/setter

我繼承了一些在getter / setter上有@JsonProperty注釋的位代碼。 目的是當使用Jackson庫序列化對象時,字段具有該特定名稱。

當前代碼:

private String fileName;

@JsonProperty("FILENAME")
public String getFileName()
{
    return fileName;
}

@JsonProperty("FILENAME")
public void setFileName(String fileName)
{
    this.fileName = fileName;
}

現在換另一個工具,我需要用JsonProperty來注釋該字段。 所以這將是我改變的代碼:

@JsonProperty("FILENAME")
private String fileName;

@JsonProperty("FILENAME")
public String getFileName()
{
    return fileName;
}

@JsonProperty("FILENAME")
public void setFileName(String fileName)
{
    this.fileName = fileName;
}

有沒有人在這兩個領域使用相同的注釋 - 領域以及吸氣劑/安裝者? 我環顧四周,但沒有看到任何東西。

我已編譯並運行代碼,但我不確定這是否會導致任何問題。 有什么想法嗎?

我基於一些測試的觀察結果是,與屬性名稱不同的名稱是生效的名稱:

例如。 考慮稍微修改一下你的案子:

@JsonProperty("fileName")
private String fileName;

@JsonProperty("fileName")
public String getFileName()
{
    return fileName;
}

@JsonProperty("fileName1")
public void setFileName(String fileName)
{
    this.fileName = fileName;
}

fileName字段和方法getFileName都具有正確的fileName屬性名稱, setFileName具有不同的fileName1 ,在這種情況下,Jackson將在反序列化時在json中查找fileName1屬性,並在該點創建名為fileName1的屬性序列化。

現在,來到你的情況,所有三個@JsonProperty都與fileName的默認屬性名不同,它只選擇其中一個作為屬性( FILENAME ),並且三個不同的任何一個,它會拋出一個異常:

java.lang.IllegalStateException: Conflicting property name definitions

除了現有的好答案之外,請注意Jackson 1.9通過添加“屬性統一”來改進處理,這意味着使用(希望)直觀優先級來合並來自邏輯屬性的不同部分的所有注釋。

在Jackson 1.8和之前的版本中,在確定序列化的內容和編寫方式時,只使用了字段和getter注釋(編寫JSON); 並且僅用於反序列化的setter注釋(讀取JSON)。 這有時需要添加“額外”注釋,例如注釋getter和setter。

使用Jackson 1.9及以上版本時,不需要這些額外的注釋。 仍然可以添加那些; 如果使用不同的名稱,可以創建“拆分”屬性(使用一個名稱進行序列化,使用其他名稱進行反序列化):這有時可用於重命名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM