2011-08-05 19 views
1

Spring MVCフレームワーク(v3)を使用してWebアプリケーションを開発しています。Spring MVCコントローラの設定 - 注釈とXMLのミックス@PathVariable

は現在、私はいくつかのコントローラクラスが定義されている - MultiActionControllerを拡張することによって、私はそれらを作成して、その後、私のWeb MVC XMLの設定で豆とURLのマッピング定義された:

QuestionController.javaを:

public class QuestionController extends MultiActionController implements InitializingBean 
{ 

webmvc-config.xmlの

<bean id="questionController" class="com.tmm.enterprise.microblog.controller.QuestionController"></bean> 
... 
    <bean id="fullHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
     <property name="alwaysUseFullPath" value="true" /> 
     <property name="mappings"> 
      <props> 
       <prop key="/question/**">questionController</prop> 
      </props> 
     </property> 
    </bean> 

これは正常に動作し、私が呼び出されているURLとeverythinに一致する私のコントローラのメソッドを定義しますgは正しく動作します(たとえば、私はを参照すると正しく実行されるlist(..)メソッドを持っています)。

しかし、私は変数のURLを可能にするために春@PathVariableオプションを利用したい、この特定のコントローラ(例えばのために私は/question/detail/9999を呼び出すことdetails(..)方法、ほしい - 9999は、メソッドが実行された質問のIDであります)。

QuestionController.java:しかし

@RequestMapping("/detail/{questionId}") 
public ModelAndView detail(@PathVariable("questionId") long questionId, HttpServletRequest request, HttpServletResponse response) throws Exception{ 

を私は上記を実行し得るとき、私はエラーを取得する:私は次のようにこれを使用しようとしました

見つかりませんでした@PathVariable [questionId ] in @RequestMapping

誰もがこれまでに遭遇したことはありますか? RequestMapping注釈と既存のXMLで設定されたURLマッピングを混在させることはできますか?

+0

を 詳細部分を残すことができ

EDIT

あなたがいます'@ RequestMapping'を' MultiActionController'に追加しようとしていると言っていますか? – skaffman

+0

私は、細部ではなくトップにウリの部分を移動すると言っていました。それを反映する答えを編集しました。 –

答えて

4

これは私がコメントの権利を読んでいる場合は、あなたのQuestionController.javaの上部に@RequestMapping追加した場合、それは

注釈付きのコントローラは、通常はマークされているあなたの問題を解決するかもしれない、DefaultAnnotationHandlerMappingクラスからのコメントですタイプレベルで{@link Controller}ステレオタイプ を使用します。 RequestMappingが である場合(これは通常、ハンドラが {org.springframework.web.servlet.mvc.Controller}インタフェースを実装しているため)、これは厳密には必要ありません。しかし、{@linkコントローラ} は{@link RequestMappingは} タイプレベルで存在しない場合メソッドレベル{@link RequestMapping}注釈 を検出するために必要とされます。あなたは、このようないくつかのことを行うトップへのURIの/質問一部を移動し、メソッドレベルで

@RequestMapping("/question") 
public class QuestionController 
{ 
    @RequestMapping("/detail/{questionId}") 
    public ModelAndView detail(@PathVariable("questionId") long questionId, HttpServletRequest request, HttpServletResponse response) throws Exception{ 

} 
+0

パーフェクト - クラスに@RequestMappingを追加すると、仕事ができました、ありがとう! – rhinds

関連する問題