繁体   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