2

XML セットアップから JavaConfig セットアップに移行した後、RequestMappings の多くが壊れて、あいまいなメソッド エラーを返すようになりました。私たちのメソッドは、@PathVariable の正規表現に依存して、どちらを呼び出すかを決定します。例えば:

@RequestMapping(value={"/{id:\\d+}/boats"})
public String getBoatsById(@PathVariable("id") Long id, Model model,
HttpServletRequest request) throws Exception {...}

@RequestMapping(value={"/{id}/boats"})
public String getBoatsByName(@PathVariable("id") String id, Model model,
HttpServletRequest request) throws Exception {...}

これは以前は問題なく動作していましたが、新しい JavaConfig セットアップと XML セットアップを使用すると、マッピングによるあいまいなエラーで壊れます。

JavaConfig クラスは次のように始まります。

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.example", excludeFilters = { @ComponentScan.Filter( Configuration.class ) })
public class WebConfig extends WebMvcConfigurationSupport

AnnotationMethodHandlerAdapter を使用した XML セットアップと、現在推奨されている RequestMappingHandlerAdapter を使用している JavaConfig クラスに何か関係がありますか? 不足している設定はありますか?

4

1 に答える 1

0

ソースコードを閲覧しただけAnnotationMethodHandlerAdapterRequestMappingInfoRequestMappingHandlerAdapter. 前者は等しいかどうかをチェックするときに指定したパターン/パスを無視し、後者はそれを尊重します。そのため、あいまいなマッピング エラーが発生しています。それがバグかどうかはわかりませんが、おそらく spring-contrib メーリング リストの人々に尋ねるのが良いでしょう。

編集

おそらく、マッピングを変更することをお勧めします。この{name:reg_exp}構文は、あいまいさを解決しないために導入されました。公式ドキュメントからの抜粋:

URI テンプレート変数をより正確に定義する必要がある場合があります。URL「/spring-web/spring-web-3.0.5.jar」を検討してください。どうやって複数に分解するの?

@RequestMapping アノテーションは、URI テンプレート変数での正規表現の使用をサポートしています。構文は {varName:regex} で、最初の部分で変数名を定義し、2 番目の部分で正規表現を定義します。例:

@RequestMapping("/spring-web/{symbolicName:[az-]+}-{version:\d\.\d\.\d}{extension:\.[az]+}")
public void handle(@PathVariable String バージョン、@PathVariable String 拡張) {
    // ...
} }

あなたのハンドラー メソッドは最初からあいまいでした。あいまいさを解決するハックな方法を提供しただけです。

于 2013-04-12T08:00:02.163 に答える