來自Struts2我習慣於在超類(或package-info.java
)上聲明@Namespace
註解,並且繼承類將隨後選取其祖先的@Namespace
註釋中的值並將其預先加載到請求路徑爲行動。我現在要做的使用@RequestMapping
註釋在Spring MVC類似如下(修剪簡碼):Spring MVC @RequestMapping繼承
package au.test
@RequestMapping(value = "/")
public abstract class AbstractController {
...
}
au.test.user
@RequestMapping(value = "/user")
public abstract class AbstractUserController extends AbstractController {
@RequestMapping(value = "/dashboard")
public String dashboard() {
....
}
}
au.test.user.twitter
@RequestMapping(value = "/twitter")
public abstract class AbstractTwitterController extends AbstractUserController {
...
}
public abstract class TwitterController extends AbstractTwitterController {
@RequestMapping(value = "/updateStatus")
public String updateStatus() {
....
}
}
/
作品預計/user/dashboard
按預期工作- 然而,當我想預計
/user/twitter/updateStatus
工作它沒有和檢查日誌我可以看到一個日誌條目,看起來像這樣:
org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping - 映射的URL路徑[/高音/ updateStatus]在處理 'twitterController'
是否有設置我可以啓用將掃描超類爲@RequestMapping
註釋並構建正確的路徑?
另外我還認爲在package-info.java
的封裝上定義@RequestMapping
是非法的?
你有沒有任何機會得到任何其他建議,如何實現這一點。在我看來,像一個廢物不得不把/ x/y/z放在一個子類環境中。然後,如果我決定更改/ x/to/k /,我必須到代碼中定義的所有位置並手動更改它! – garyj
@chris:這不適合我。是否涉及配置步驟,還是僅僅是註釋問題?基本控制器確實與擴展基本控制器的控制器在同一個包中。但是,基本控制器的URI/RequestMapping被忽略和/或未找到。 「org.springframework.web.servlet.DispatcherServlet:947 - 沒有找到具有URI的HTTP請求的映射」。所以,如果我只是使用擴展控制器的「基礎」RequestMapping,那很好。如果我嘗試使用由基本控制器繼承的RequestMapping,則無法找到URI。 – Rick
它的值得明確指出,超類路徑仍然可路由。也就是說,覆蓋一個類並提供新的@ RequestMapping不會覆蓋或替換超類的@ RequestMapping,它只是增加了一些。例如,在OP的問題中,這意味着所有這些路徑都是有效的:'/ user/dashboard','/ twitter/updateStatus'。 – kuporific