Jaxb JAX-RS中的自有资源
我试图理解REST和JAX-RS/JAXB,我与图书馆和书籍有着多对多的关系。我想对图书馆拥有的图书执行GET-POST-PUT-DELETE操作,因此GET的url是“libraries/{library\u id}/books/{book\u id}” 我以这种方式实现了它:Jaxb JAX-RS中的自有资源,jaxb,jax-rs,Jaxb,Jax Rs,我试图理解REST和JAX-RS/JAXB,我与图书馆和书籍有着多对多的关系。我想对图书馆拥有的图书执行GET-POST-PUT-DELETE操作,因此GET的url是“libraries/{library\u id}/books/{book\u id}” 我以这种方式实现了它: @Stateless @Path("libraries") public class LibraryFacadeREST extends AbstractFacade<Library> { ...
@Stateless
@Path("libraries")
public class LibraryFacadeREST extends AbstractFacade<Library> {
...
@Path("{library_id}/booksFacade/")
public BookFacadeREST getBookFacade() {
return bookFacadeREST;
}
...
}
@Stateless
@Path("books")
public class BookFacadeREST extends AbstractFacade<Book> {
...
@GET
@Path("{id}")
@Produces({"application/xml", "application/json"})
public Book find(@PathParam("id") Long id, @PathParam("library_id") long libraryId) {
Book book = super.find(id);
if (libraryId != -1) {
Library library = em.find(Library.class, libraryId);
if (book.getLibraries().contains(library)) {
return book;
} else {
return null;
}
}
return null;
}
...
}
@Path("libraries/{library_id}/books")
public class BookFacadeREST extends AbstractFacade<Book> {
@GET
@Path("{id}")
@Produces({"application/xml", "application/json"})
public Book find(@PathParam("id") Long id, @PathParam("library_id") long libraryId) {
...
}
}
@无状态
@路径(“库”)
公共类LibraryFacadeREST扩展了AbstractFacade{
...
@路径(“{library\u id}/booksFacade/”)
public BookFacadeREST getBookFacade(){
返回bookFacadeREST;
}
...
}
@无国籍
@路径(“书籍”)
公共类BookFacadeREST扩展了AbstractFacade{
...
@得到
@路径(“{id}”)
@产生({“application/xml”、“application/json”})
公共图书查找(@PathParam(“id”)长id,@PathParam(“library_id”)长libraryId){
Book Book=super.find(id);
如果(libraryId!=-1){
Library Library=em.find(Library.class,libraryId);
if(book.getLibraries().contains(library)){
还书;
}否则{
返回null;
}
}
返回null;
}
...
}
但我不喜欢它,它很糟糕,有没有更好的方法来管理JAXR中的自有资源 为什么rest资源需要关系仅仅因为相应的实体有关系? 我认为图书资源应该这样:
@Stateless
@Path("libraries")
public class LibraryFacadeREST extends AbstractFacade<Library> {
...
@Path("{library_id}/booksFacade/")
public BookFacadeREST getBookFacade() {
return bookFacadeREST;
}
...
}
@Stateless
@Path("books")
public class BookFacadeREST extends AbstractFacade<Book> {
...
@GET
@Path("{id}")
@Produces({"application/xml", "application/json"})
public Book find(@PathParam("id") Long id, @PathParam("library_id") long libraryId) {
Book book = super.find(id);
if (libraryId != -1) {
Library library = em.find(Library.class, libraryId);
if (book.getLibraries().contains(library)) {
return book;
} else {
return null;
}
}
return null;
}
...
}
@Path("libraries/{library_id}/books")
public class BookFacadeREST extends AbstractFacade<Book> {
@GET
@Path("{id}")
@Produces({"application/xml", "application/json"})
public Book find(@PathParam("id") Long id, @PathParam("library_id") long libraryId) {
...
}
}
@Path(“libraries/{library\u id}/books”)
公共类BookFacadeREST扩展了AbstractFacade{
@得到
@路径(“{id}”)
@产生({“application/xml”、“application/json”})
公共图书查找(@PathParam(“id”)长id,@PathParam(“library_id”)长libraryId){
...
}
}
是的,我也这么想。通过这种方式,类更具可读性。