![](/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.