5

<context:component-scan>コントローラーに@RequestMapping注釈を付けてSpring 3.0.5を使用しています。これは機能し、URL はパッケージ スキャンによって登録されます。

しかし、XML 構成で定義されたハンドラー マッピングがあると問題が発生します。注釈は@RequestMapping取得されなくなりました。

問題を単純なアプリケーションに分離しました。

次のコントローラーがある場合:

package test.pack.age;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class TestController {
    @RequestMapping(value="/test")
    public String showTestPage() {
        return "testPage";
    }
}

および次の構成:

<context:component-scan base-package="test.pack.age" />
<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
  <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
  <property name="prefix" value="/WEB-INF/jsp/" />
  <property name="suffix" value=".jsp" />
</bean>

アプリケーションは正常に動作し、URL/testは登録され、正常に動作します。

18/09/2011  20:02:55    org.springframework.web.servlet.handler.AbstractUrlHandlerMapping   INFO    Mapped URL path [/test] onto handler 'testController'
18/09/2011  20:02:55    org.springframework.web.servlet.handler.AbstractUrlHandlerMapping   INFO    Mapped URL path [/test] onto handler 'testController'

しかし、XML にハンドラー マッピングを追加すると、機能しなくなります。このような単純なものでも:

<bean id="handlerMappings" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" />

これは基本的に何もせず、<context:component-scan>URL を登録しなくなります。

注釈を付けることができない一部の (サード パーティの) コントローラー用に追加のハンドラー マッピングが必要ですが、追加するとすべての@RequestMappings が壊れます。

これは正常ですか?バグ?(Spring版は変更できません)

何か不足していますか?

4

2 に答える 2

4

これは正常ですか?バグ?(Springバージョンは変更できません)

私は何かが足りないのですか?

私は何かが欠けていました:D。これがSpringのDefaultAnnotationHandlerMappingのJavaDocsに埋め込まれていることがわかりました。

注:DispatcherServletコンテキストでカスタムHandlerMapping Beanを定義する場合、カスタムHandlerMapping Beanがデフォルトのマッピング戦略を置き換えるため、DefaultAnnotationHandlerMappingBeanを明示的に追加する必要があります。

これを構成XMLに追加すると、すべてが機能するようになります。

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
于 2011-09-18T20:03:32.593 に答える
0

あなたの注釈Controllerがもう取り上げられていない理由はわかりませんが、あなたの問題はidあなたが提供したSimpleUrlHandlerMapping. である必要がありますhandlerMapping

于 2011-09-18T19:02:18.360 に答える