6

Spring MVC レスト サービスでは、構成済みの RequestMapping 値を超えるものと一致させようとして問題が発生しています。

たとえば、私はこれを持っています:

@RequestMapping(value = "{configKey}/{arguments:.*}", method = RequestMethod.GET)

これは、2 番目のパス変数を超えるものに一致することを示しています。問題は、これが次のようにうまく動作することです:

get("/test/document")

これは404で終わりますが:

get("/test/document/download")

Spring がこの正規表現を処理できないのは奇妙です。私は実際に多くの解決策を試しましたが、どれもうまくいきませんでした。

以前は、JAX-RS で次の構成を使用していました。

@Path("/{configKey}/{arguments:.*}")

そして、すべてが良かったのですが、今私は移行していて、この問題を抱えています.

何が起こっているのか、これを修正する方法を知っている人はいますか?

編集:

追加{configKey}/**- 機能しません

追加{configKey}/{arguments}/**は機能しますが、たとえば次のように呼び出した場合:

get("/test/document/download")test構成キーとdocument引数としてのみ取得します。引数では、. を超えるすべてのものを取得することを期待してい{configKey}ます。たとえば、どのような場合でも機能するはずです。

get("/test/document")
get("/test/document/download")
get("/test/document/download/1")
get("/test/document/download/1/2")
get("/test/whatever/xxx/1/2/etc")

JAX-RSの構成で動作していたもの:@Path("/{configKey}/{arguments:.*}")

4

3 に答える 3

0

私はそれに対する回避策を見つけました。それは永続的な解決策ではありません。Spring のバグだと思います。私はJiraを作成しましたが、ここで修正されるまでは次のようになります。

リクエスト マッピングを次のように定義する必要がありました。

@RequestMapping(value = "{configKey}/**", method = RequestMethod.GET)

したがって、基本的には、パスの最初の変数の後にあるものすべてに一致します。

それで:

String arguments = pathMatcher.extractPathWithinPattern(
        request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE).toString(),
        request.getPathInfo());

pathMatcher は、Spring によって使用される AntPathMatcher のインスタンスです。

したがって、たとえば次のパスに対して HTTP GET を呼び出します。

get("/test/leaderboard/user/mq/frankie1")

私は持っている:

configKey = test
arguments = leaderboard/user/mq/frankie1
于 2015-02-23T14:19:55.487 に答える