从Java Web服务返回复杂类型

时间:2010-01-19 19:00:30

标签: java web-services java-ee xsd

我使用Java Persistence,我想要一个web方法来返回Entity类的“部分”。例如,我有一个Customer类,它表示Customer表中包含许多字段的记录,但我想只返回其中的一些。是否可以使用映射来做到这一点?或者唯一的方法是创建一个只有我想要返回的字段的新类(可能是Customer的超类)?我尝试过绑定,但它没有用(显然我是以错误的方式做到的):

@Entity  
@Table(name = "Customer", catalog = "test", schema = "")
@XmlType(name = "Customer")
public class Customer implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")  
@XmlElement  
private Integer accountId;

@Basic(optional = false)    
@Column(name = "username")
@XmlElement
private String username;

@Basic(optional = false)
@Column(name = "password")
private String password;

我认为如果我不将@XmlElement注释添加到密码字段,它将不会包含在结果中。但是,我在部署期间得到了一堆“类有两个相同名称的属性”错误。

2 个答案:

答案 0 :(得分:3)

这是因为XML生成的默认行为是PUBLIC_MEMBER(http://java.sun.com/javaee/5/docs/api/javax/xml/bind/annotation/XmlAccessorType.html)。

由于您将@XmlElement放在字段上,因此它会抓取您的公共getter / setter方法和任何带有@XmlElement的字段。你可能想要的是将XmlAccessorType设置为FIELD或NONE。

答案 1 :(得分:2)

使用

注释班级
@XmlAccessorType(XmlAccessType.NONE)

然后使用

注释要发送的字段
@XmlElement(name="field_name")

实际上有一个JAXB问题(我现在找不到引用)基本上说如果你要从XML读取,你会想要注释 setter 而不是田野本身。