簡體   English   中英

如何使用Jackson和JaxB序列化構建我的RESTful Web服務

[英]How to architect my RESTful webservice with Jackson and JaxB serialization

我有一些敏感的域對象,我想將其轉換為json和xml。 我正在使用彈簧視圖分辨率來做到這一點,但這不重要。

我想在域對象中添加注釋,以指定應將哪些字段轉換為xml / json。

就像是

@XmlRootElement
public class SensitiveDomainObject { 

...

    public String getPassword() {...}

    @XmlAttribute
    @JsonValue
    public String getAccountName() {...}

    @XmlAttribute
    @JsonValue
    public String getGoldMemberStatus() {...}

}

我希望將getAccountName()和getGoldMemberStatus()序列化為json和xml,但不要將getPassword序列化。

我不想要的是

1)分別將json和xml的“注釋放置策略”分開,因為如果需要以不同的方式標記不同的方法作為標准,這會造成混淆。

2)要明確地忽略字段。 這是因為,如果將來有一些程序員出現並添加一個新的敏感字段而不包含例如@JsonIgnore批注,則會突然共享該敏感字段。

3)必須將諸如getPassword()之類的方法設為私有。 我仍然希望能夠在內部調用getPassword()。

有沒有人這樣做或有任何想法?

編輯

包括來自IBM的一張圖片,該圖片實質上顯示了我所使用的設計,並在業務邏輯層中帶有帶有注釋的顯式DTO。 表示層根據傳入的URL確定要請求和服務的DTO。

在此處輸入圖片說明

如果您非常在意區分您的業務類和傳輸的類,則可以考慮實現一個單獨的DTO類包,該包將顯式僅包含您要傳輸的那些屬性。

在這種情況下,您必須顯式包括傳輸屬性,因為程序員忘記了傳遞屬性,所以不會發生這種情況。

還有其他方法,例如添加一些驗證規則,以忽略諸如password之類的屬性,並在JAXB上下文級別上實施它們。 但這只有在不知道的人將其命名為kennwortcredentials或可能想到的任何東西並且您的驗證規則將失效之前,該方法才起作用。

所以我看到兩種方式:*您可以信任程序員(以及所有QA / QS流程,例如代碼審查等)來支持他/他。 *或者,您可以使傳輸類明確。

對於重要的外部接口,我可能會采用第二種方法(顯式DTO)。 如果password到此為止,那么就不能忘記它,它只會是故意的。

暫無
暫無

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

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