2012-02-21 3 views
0

Я пытаюсь понять REST и JAX-RS/JAXB, у меня есть отношения «многие-ко-многим» между библиотеками и книгами. Я хочу сделать операции GET-POST-PUT-DELETE в книге, принадлежащей библиотеке, поэтому URL-адрес для GET «library/{library_id}/books/{book_id}» Я реализовал его таким образом :Собственный ресурс в JAX-RS

@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; 
    } 
    ... 
} 

Но мне это не нравится, это отстой, есть ли лучшие способы управления собственными ресурсами в jaxrs?

ответ

0

Зачем нужны ресурсы, необходимые для отношений, потому что соответствующие сущности имеют отношения? Я думаю, что книжный ресурс должен таким образом:

@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) { 
     ... 
    } 
} 
+0

yep, Я думаю то же самое. Таким образом, классы более читабельны. – Antonio