Возврат сложного типа из веб-службы Java - PullRequest
2 голосов
/ 19 января 2010

Я использую Java Persistence и хочу, чтобы веб-метод возвращал «часть» класса 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 ]

3 голосов
/ 22 марта 2010

Это связано с тем, что по умолчанию для генерации XML используется PUBLIC_MEMBER (http://java.sun.com/javaee/5/docs/api/javax/xml/bind/annotation/XmlAccessorType.html).

Поскольку вы помещаете @XmlElement в поля, он захватывает как ваши общедоступные методы получения / установки, так и любое поле с @XmlElement. Скорее всего, вы захотите установить для XmlAccessorType значение FIELD или NONE.

2 голосов
/ 28 июля 2010

Аннотируйте класс с помощью

@XmlAccessorType(XmlAccessType.NONE)

Затем аннотируйте поля, которые вы хотите отправить с помощью

@XmlElement(name="field_name")

На самом деле существует проблема JAXB (что я не могу найти ссылку справасейчас) это в основном говорит о том, что если вы будете читать из XML, вам нужно будет аннотировать сеттеры , а не сами поля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...