2015-11-02 39 views
1

我有一個名爲Checkout的實體,它有一個用戶和一個項目。所以當用戶想要創建一個新的結賬對象時,他們可以用POST來「/ checkout」。現在,我想設置用戶和項目,用戶反而會包括例如用戶名和序列號,這樣的:如何創建一個自定義setter來設置Jersey/Jackson中的對象?

{ 
    "id": "1", 
    "user": "hassan", 
    "item": "sdf2ljt234jt09jsd" 
} 

那我就隨便寫的自定義制定者在採取絃樂我結帳類而不是用戶和物品:

public void setUser(String username) { 
    this.user = ... 
} 

但是澤西從未打電話給我的二傳手。用戶和項目屬性都保留爲空,我不知道爲什麼。如果這不是用Jersey/Jackson設置對象的正確方法,那麼我還應該嘗試其他方法嗎?

回答

3

您可以使用@JsonDeserialize指定生成器類,可容納定製邏輯從一個字符串去一個用戶或項目:

@JsonDeserialize(builder = Checkout.Builder.class) 
public class Checkout { 
    private Long id; 
    private User user; 
    private Item item; 

    // getters and setters 

    public static class Builder { 
     private Long id; 
     private String username; 
     private String serialNumber; 

     @JsonProperty("id") 
     public Builder setId(Long id) { 
      this.id = id; 
      return this; 
     } 

     @JsonProperty("user") 
     public Builder setUsername(String username) { 
      this.username = username; 
      return this; 
     } 

     @JsonProperty("item") 
     public Builder setSerialNumber(String serialNumber) { 
      this.serialNumber = serialNumber; 
      return this; 
     } 

     public Checkout build() { 
      Checkout checkout = new Checkout(); 
      checkout.setId(id); 
      checkout.setUser(/* lookup user by username */); 
      checkout.setItem(/* lookup item by serialNumber */); 
      return checkout; 
     } 
    } 
} 

通知各Builder的制定者使用@JsonProperty類以及他們如何使用JSON中的屬性名稱。確保您的JSON結構正確映射到構建器字段非常重要。

相關問題