1

春の 3.0.x では、次のように完全に機能するハンドラー メソッドがあります。

@RequestMapping("/foo/{version:\\d+}/**")
public void handleVersionedResource(@PathVariable("version") Long version, HttpServletRequest request, HttpServletResponse response) {
     String path = (String) request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);

     // rest of the code maps path and version to a real resource and serves 
     // content with extra long cache control / expires headers
 }

3.0.x では、リクエスト URL は /foo/12345/some/resource で、path = "some/resource" (リクエストの ** 部分が一致) です。

ただし、3.1.x (3.1.0.RELEASE と 3.1.1.RELEASE の両方で試行) では、path = 完全な要求パスに一致するため、前の例では "/foo/12345/some/resource" になります。

問題は、私が 3.0.x で取得していた動作を再現する最も簡単な方法を誰かが持っているかどうかです。また、この動作が変更された理由についての洞察はありますか? そもそも私のやり方が悪かったのでしょうか?

更新: Spring 3.1.RC1 と PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTEの繰り返し- そこにも良い答えはありませんでした。

4

1 に答える 1

2

Spring 3.1.RC1およびPATH_WITHIN_HANDLER_MAPPING_ATTRIBUTEは、HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTEがSpringの内部にあり、アプリケーションで使用しないことを示しています。

「/」を含む@pathVariableを持つSpring@RequestMappingを照合する方法と同様のことをしますか?おそらくあなたの最善の策でしょう

于 2012-04-25T18:18:06.440 に答える