我試圖用Spring MVC構建一個RESTful API。我正在拍攝乾淨且易於管理的代碼,其中包結構遵循url結構。如何在Spring 3 MVC REST API中繼承RequestMappings
所以這是我有:
// 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);
}
雖然這工作,我覺得很雜亂,而且容易出錯不得不重複「/庫/ {}庫Id 「在所有繼承的@RequestMappings中,/ library很可能是API的一大部分的根,它應該被寫入一次並且被重用,而不是隨處可用。
我想這本書級改寫爲這樣的:
// 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);
}
有什麼辦法Spring可以幫助我在這裏?我可以使用普通的java繼承,spring註解或其他任何能夠幫助我不寫「/ library/{libraryId}」作爲我寫過的每個url的一部分的東西。
是的,我意識到這種可能性,它比僅僅註釋這些方法更好,但距離完美還有很長的路要走。 –
根據你的回答,從完美的不清晰到我想要的東西還有很長的路要走。你能否展示一對夫婦資源的完整url,並描述你想讓他們處理哪些控制器? – SingleShot
對,這可能是一個奇怪的例子,但... '/ country/{countryCode}/state/{stateCode}/city/{cityCode}/street/{streetCode}/number/{streetNumber}' 這些步驟(即國家,州,城市,街道和號碼)應該進入它自己的控制器,並且每個步驟都有一個動詞子集。主要問題是,當我執行numberController時,我不會從國家一路重複url,並且我不想「知道」countryCode是此資源的關鍵。我只是想「擁有」它。 –