Próbuję zbudować RESTful API przy użyciu Spring MVC. Stawiam na czysty i łatwy w zarządzaniu kod, w którym struktura pakietu podąża za strukturą adresu URL.Jak dziedziczyć RequestMappings w Spring 3 MVC REST API
Więc tutaj jest to, co mam:
// 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);
}
Chociaż to działa, uważam, że to brudny i podatne na błędy musiał powtórzyć „/ Library/{} libraryId "we wszystkich dziedziczonych plikach @RequestMappings,/library prawdopodobnie będzie źródłem dużej części interfejsu API i powinno być napisane raz i ponownie użyte zamiast wszędzie napisane.
Chciałbym przepisać książkę klasy do czegoś takiego:
// 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);
}
Czy istnieje jakiś sposób, wiosna może mi tu pomóc? Dopuszczalne jest używanie normalnego dziedziczenia java, adnotacji wiosennej lub czegokolwiek innego, co pomaga mi nie pisać "/ library/{libraryId}" jako części każdego adresu URL, jaki kiedykolwiek napisałem.
Tak, jestem świadomy tej możliwości i jest to o wiele lepsze niż tylko opisywanie metod, ale wciąż daleko do ideału. –
Na podstawie Twojej odpowiedzi, że jest to dalekie od doskonałego, niejasne dla mnie, czego chcesz. Czy możesz pokazać pełne adresy URL kilku zasobów i opisać, które kontrolery chcesz obsługiwać? – SingleShot
Dobrze, może to być dziwny przykład, ale ... '/ country/{countryCode}/state/{stateCode}/city/{cityCode}/street/{streetCode}/number/{streetNumber}' każdy z te kroki (tj. kraj, stan, miasto, ulica i numer) powinny przejść do jego własnego kontrolera, a każda z nich ma podzbiór czasowników na nich. Głównym pytaniem jest, kiedy robię numberController, że nie będę powtarzać adresu URL z kraju i nie będę "wiedzieć", że kod kraju jest kluczem do tego zasobu. Po prostu chcę "mieć" to. –