2013-11-28 70 views
0

我的異常類,看起來像這樣,使用傑克遜,當我試圖反序列化 成員被命名爲「信息」和「restoreStatus」連載時,我期待他們能夠「消息」和'狀態'。的Json /傑克遜命名約定

爲什麼傑克遜選擇將我的狀態變量命名爲restoreStatus?jackson/json命名約定是如何工作的?

@XStreamAlias("RestoreInProgressException") 
public class RestoreInProgressException extends HostManagerException { 

    private static final long serialVersionUID = xxxx; 

    private RestoreStatus status; 

    @JsonCreator 
    public RestoreInProgressException(@JsonProperty("message") String message, @JsonProperty("status") RestoreStatus status) { 
     super(message, HttpStatus.SC_CONFLICT); 
     this.status = status; 
    } 

    public RestoreStatus getRestoreStatus() { 
     return this.status; 
    } 

} 

回答

1

請看到這個問題Jackson field based serialization找到一些信息,序列化算法在傑克遜庫是如何工作的。在你的例子中,你有status屬性,但是有getRestoreStatus getter方法。傑克遜讀取該類中的所有getter方法並嘗試將其序列化。如果您使用@JsonProperty@JsonProperty("status")對其進行註釋,傑克遜還會將輸出JSON添加到您的status屬性。在這種情況下,您的輸出Jackson將包含兩個屬性statusrestoreStatus。如果你想有隻status在輸出JSON屬性,你必須:
I.更改您的getter方法名getStatus

public RestoreStatus getStatus() { 
    return this.status; 
} 

II。爲您的方法添加註釋@JsonProperty("status")

@JsonProperty("status") 
public RestoreStatus getRestoreStatus() { 
    return this.status; 
} 
+1

正確。然而,在這種情況下,不會有'狀態',只是因爲字段是'私人',並且默認情況下只有公共字段(和獲取者)被自動檢測到。 – StaxMan