![](/img/trans.png)
[英]@XmlElementWrapper Serialization not working using Jackson JaxB Annotations
[英]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上下文級別上實施它們。 但這只有在不知道的人將其命名為kennwort
或credentials
或可能想到的任何東西並且您的驗證規則將失效之前,該方法才起作用。
所以我看到兩種方式:*您可以信任程序員(以及所有QA / QS流程,例如代碼審查等)來支持他/他。 *或者,您可以使傳輸類明確。
對於重要的外部接口,我可能會采用第二種方法(顯式DTO)。 如果password
到此為止,那么就不能忘記它,它只會是故意的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.