Estoy intentando construir una API RESTful utilizando Spring MVC. Estoy buscando un código limpio y manejable donde la estructura del paquete sigue la estructura de la url.Cómo heredar RequestMappings en una Spring 3 MVC REST API
Así que aquí es lo que tengo:
// com.test.api.library
@RequestMapping("/library/{libraryId}")
public Library getLibrary(@PathVariable long libraryId) {
return service.getLibraryById(libraryId);
}
// com.test.api.library.book
@RequestMapping("/library/{libraryId}/book/{bookId}")
public Book getBook(@PathVariable long libraryId, @PathVariable long bookId) {
Library library service.getLibraryById(libraryId);
return library.getBookById(bookId);
}
Aunque esto funciona, me resulta complicado y propenso a errores que tiene que repetir "/ Library/{} libraryId "en todos los @RequestMappings heredados,/es probable que la biblioteca sea la raíz de una gran parte de la API y debe escribirse una vez y reutilizarse en lugar de estar escrita en todas partes.
me gustaría volver a escribir el libro de clase a algo como esto:
// com.test.api.library.book
@RequestMapping("/book/{bookId}")
public Book getBook(@PathVariable long bookId) {
// long libraryId magically given to me from the library-class's getLibrary()
Library library service.getLibraryById(libraryId);
return library.getBookById(bookId);
}
¿Hay alguna manera de primavera me puede ayudar aquí? Es aceptable para mí usar la herencia java normal, la anotación de primavera o cualquier otra cosa que me ayude a no escribir "/ library/{libraryId}" como parte de cada url que escribo.
Sí, soy consciente de esa posibilidad y es mucho mejor que simplemente anotar los métodos, pero aún está lejos de ser perfecto. –
En base a su respuesta, que está muy lejos de ser perfecto, no está claro para mí lo que desea. ¿Puede mostrar las URL completas de un par de recursos y describir qué controlador (es) quiere que maneje? – SingleShot
Bien, este podría ser un ejemplo extraño pero ... '/ country/{countryCode}/state/{stateCode}/city/{cityCode}/street/{streetCode}/number/{streetNumber}' cada uno de estos pasos (es decir, país, estado, ciudad, calle y número) deben ir a su propio Controlador y cada uno tiene un subconjunto de verbos en ellos. La pregunta principal es cuando hago el control numérico que no voy a repetir la url todo el camino desde el país y no quiero "saber" que countryCode es la clave de este recurso. Solo quiero "tenerlo". –