我正在尝试使用 Jersey 声明式超链接和 JAXB 来实现对我来说似乎相当简单的事情,但是尽管阅读了所有文档和示例,但我发现我无法让事情正常工作。
我有一家书店,每本书都有一个标题。我希望 GET /bookstore 只返回一组指向书籍的超链接,而 GET /bookstore/some-title 将返回实际的序列化书籍属性。
我对资源和“表示”以及@Ref 应该工作的方式完全感到困惑。设计这个最干净的方法是什么?
锦上添花将是能够基于查询参数获取书店集合的任一版本(仅具有书籍 URI 的浅层或具有实际书籍属性的深层)......
我试图将此方法添加到书店:
@XmlElement
public BookRef[] getBookReferences()
{
BookRef[] refs = new BookRef[_books.size()];
for (int i = 0; i < refs.length; i++) {
refs[i] = new BookRef(_books.get(i).getTitle());
}
return refs;
}
使用这个 BookRef 类:
@XmlRootElement(name="book")
public class BookRef
{
private String _title;
public BookRef()
{
}
public BookRef(@PathParam("title") String title)
{
_title= title;
}
@Ref(resource=Book.class,
style = Ref.Style.ABSOLUTE,
bindings=@Binding(title="title", value="${instance.title}")
)
private URI _self;
@XmlElement
public URI getURI()
{
return _self;
}
}
...但这只会产生(在 JSON 中): {"bookReferences":null}