CXF:如何在通过SOAP发送对象时排除某些属性?

我使用Apache CXF 2.4.2,当我从数据库向用户返回一些对象时,我想要排除一些属性(例如,密码)。 如何在不创建临时课的情况下做到这一点? 这有注释吗?

根据@ tomasz-nurkiewicz评论我应该使用@XmlTransient注释。 但正如文档中所述

默认情况下,如果某个类上没有@XmlAccessorType,并且没有使用@XmlAccessorType对其超类进行批注,则假定该类具有以下默认值:

@XmlAccessorType(XmlAccessType.PUBLIC_MEMBER)

其中XmlAccessType.PUBLIC_MEMBER表示:

除非通过XmlTransient注释,否则每个公共getter / setter对和每个公共字段都将自动绑定到XML。 私有,受保护或默认为仅包访问的字段或getter / setter对仅在通过适当的JAXB注释显式注释时才绑定到XML。

所以这就是为什么@XmlTransient for private field在Tomasz Nurkiewicz的例子中不起作用的原因。 有两种方法可以解决这个问题:

1)向公共getter添加注释:

 private String password; @XmlTransient public String getPassword() { return password; } 

2)将@XmlAccessorType添加到类:

 @XmlAccessorType(XmlAccessType.FIELD) public User { @XmlTransient private String password; } 

发现于: http : //old.nabble.com/@XmlTransient-ignored-td7406659.html

我假设您正在使用JAXB进行对象XML映射。 在这种情况下,只需使用@XmlTransient注释要在数据库实体中跳过的字段。

 @XmlTransient private String password; 

但请注意,有一天您会发现您确实需要一个临时课程,主要是为了将您的CXF Web服务与后端分离。 毕竟你不想记住在数据库中添加列的所有时间都会立即破坏SOAP接口……