我使用Apache CXF 2.4.2,当我从数据库向用户返回一些对象时,我想要排除一些属性(例如,密码)。我如何才能而不创建临时类?有注释吗?
答案 0 :(得分:10)
根据@ tomasz-nurkiewicz评论,我应该使用@XmlTransient
注释。但正如文档中所述
默认情况下,如果某个类上没有@XmlAccessorType,并且没有使用@XmlAccessorType注释其超类,则假定该类具有以下默认值:
@XmlAccessorType(XmlAccessType.PUBLIC_MEMBER)
XmlAccessType.PUBLIC_MEMBER
表示:
每个公共getter / setter对和每个公共字段都将自动绑定到XML,除非由XmlTransient注释。私有,受保护或默认为仅包访问的字段或getter / setter对仅在由适当的JAXB注释显式注释时才绑定到XML。
所以这就是为什么私有字段的@XmlTransient
在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
答案 1 :(得分:4)
我假设您正在使用JAXB进行对象XML映射。在这种情况下,只需使用@XmlTransient
注释要在数据库实体中跳过的字段。
@XmlTransient
private String password;
但请注意,有一天您会发现确实需要一个临时课程主要是为了将您的CXF Web服务与后端分离。毕竟你不想记住在数据库中添加一个列会立即破坏SOAP接口......