10

次のマッピングがあります。

@RequestMapping(value = "/{first}/**/{last}", method = RequestMethod.GET)
public String test(@PathVariable("first") String first,  @PathVariable("last")  
  String last) {}

次の URI の場合:

foo/a/b/c/d/e/f/g/h/bar
foo/a/bar
foo/bar

foofirstに、barlastにマップし、正常に動作します。

私が望むのは、foo と bar の間のすべてを単一のパス パラメータにマップするもの、または中間がない場合は null をマップするものです (最後の URI の例のように)。

@RequestMapping(value = "/{first}/{middle:[some regex here?]}/{last}", 
  method = RequestMethod.GET)
public String test(@PathVariable("first") String first, @PathVariable("middle")
  String middle, @PathVariable("last") String last) {}

/foo/a/bar にのみマップされる{middle:.*} や、何もマップされないように見える {middle:(.*/)*} のような単純なものを期待していたので、正規表現にかなりこだわりました。

AntPathStringMatcher は、正規表現パターンを適用する前に「/」をトークン化しますか? (交差するパターンを作成する / 不可能) または解決策はありますか?

参考までに、これは春の 3.1M2 です

これは@RequestMapping コントローラーと動的 URLに似ているように見えますが、解決策はありませんでした。

4

4 に答える 4

1

私の知る限りではできません。あなたが述べたように、正規表現は各スラッシュでパスを分割した後にパス要素に適用されるため、正規表現は「/」と一致することはありません。

URLを手動で検査し、リクエストオブジェクトから自分で解析することができます。

于 2012-05-16T17:01:38.930 に答える
1

これは、カスタムパスマッチャーを作成し、それを使用するようにSpringを構成することで実行できます。たとえば、このようなソリューションは次の場所に記載されています:http: //java.dzone.com/articles/spring-3-webmvc-optional-path

このリンクは、カスタムパスマッチャーを提供し、それを使用するようにSpringを構成する方法を示しています。カスタムコンポーネントを作成してもかまわない場合は、これでニーズが解決するはずです。

また、これはSpring 3.0の複製ですが、オプションのパス変数を作成できますか?

于 2012-11-19T19:44:52.283 に答える