Struts2から来ている私は、スーパクラス(またはpackage-info.java
)で@Namespace
アノテーションを宣言するのに慣れていて、継承クラスはその先祖の@Namespace
アノテーションの値を受け取り、それをリクエストパスの前に追加しますアクションのために。しかし、ときに私が希望 Spring MVC @RequestMapping継承
/user/dashboard
作品を期待するよう 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() {
....
}
}
/
作品:私は今(簡潔にするためにトリミングされたコード)を次のように@RequestMapping
アノテーションを使って春のMVCで同様の何かをしようとしています期待しています/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'sを提供してもスーパークラスの' @ RequestMapping'sをオーバーライドしたり置き換えたりすることはなく、追加するだけです。上のOPの質問では、例えば、これらのパスはすべて有効です: '/ user/dashboard'、'/twitter/updateStatus'です。 – kuporific