我有一些敏感的域对象,我想转换为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。
答案 0 :(得分:1)
如果您非常关心如何区分您的业务类和转移的内容,您可以考虑实施一个单独的DTO类包,它将明确包含您想要转移的属性。
在这种情况下,您必须明确包含传输属性,但这不会发生,因为程序员忘了它。
还有其他方法可以添加一些验证规则,忽略password
之类的属性,并在JAXB上下文级别强制执行它们。但只有在不知道的人会将其命名为kennwort
或credentials
或其他任何可能出现的情况并且您的验证规则将失效时,此功能才有效。
所以我看到两种方式: *要么信任程序员(以及代码审查等所有QA / QS流程)来支持她/他。 *或者您明确转移课程。
对于重要的外部接口,我可能采用第二种方法(显式DTO)。如果password
在那里结束,那就不会忘记,只会是故意的。