我有课本:
@Entity
@Table(name = "books")
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType
public class Book {
@Id
@XmlAttribute
private String isbn;
private String title;
private String authors;
private int year;
@OneToMany(mappedBy="reservedBook")
private List<Reservation> bookReservations;
//Getters, setters, addReservation, remove Reservation
......................
}
然后,我有类(class)预订
@Entity
@Table(name = "reservations")
@XmlRootElement
public class Reservation {
private String username;
private String isbn;
@Temporal(TemporalType.DATE)
private Date date;
@ManyToOne
@JoinColumn(name = "isbn")
private Book reservedBook;
@ManyToOne
@JoinColumn(name = "username")
private User userWhoReserved;
//Getters and setters
...........
}
在资源类中,我尝试像这样获取一本特定的书:
@GET
@Path("/{isbn}")
@Produces(MediaType.TEXT_XML)
public Book getBookByIsbn(@PathParam("isbn") String isbn) {
Book book = entityManager.find(Book.class, isbn);
if (book != null) {
return book;
}
}
现在,它不会序列化字段列表 bookReservations。我尝试了很多在互联网上找到的想法,比如用 @XmlElement 注释列表的 getter 或在其他地方使用其他注释(我现在不记得了),但没有任何效果。
编辑:这是响应的样子:
<book isbn="3333333333">
<title>Mere Christianity</title>
<authors>C. S. Lewis</authors>
<year>2000</year>
</book>
但我也想显示预订。
似乎是什么解决方案? 谢谢! 索林
最佳答案
我认为问题可能在于列表 bookReservations
为 null
。
class A{
private List<String> someList = new ArrayList<String>();
@XmlElement(name = "some-tag")
public List<String> getList() {
return someList;
}
public void setSomeList(List<String> someOtherList) {
this.someList = someOtherList;
}
}
我每天都使用此代码并为我工作(忽略我未提供的其他注释)。
我在这些情况下遇到过问题,但只发现由于某种原因列表为空,它没有被序列化。尝试通过调试该方法来检查 JAXB 是否在 setter 方法中设置了该列表。
关于java - 在 JAX-RS 中序列化 java.util.list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13623310/