2011-11-04 81 views
1

發表於spring forum沒有響應。Spring 3.1.RC1和PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE

我有以下代碼片段(從here),這是我的pet project的一部分。

@Controller 
@RequestMapping("/browse") 
public class MediaBrowser { 
    ... 

    @RequestMapping("/**") 
    public final ModelAndView listContents(final HttpServletRequest request) { 

     String folder = (String) request.getAttribute(
       HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE); 
       ... 
    } 

我訪問以下網址:

http://localhost:8080/myapp/browse

  • 春天3.0.6.RELEASE,我得到了folder變量null,這是預期值。
  • 在彈簧3.1.RC1中,folder變量是/browse

這是一個bug或者在spring-3.1中有什麼改變嗎?

回答

3

正如skaffman所說,你可能不應該使用PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE。以How to match a Spring @RequestMapping having a @pathVariable containing "/"?爲例,使用AntPathMatcher來完成您正在嘗試的操作

+0

得到這一個像'PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE'一樣,建議的備用'BEST_MATCHING_PATTERN_ATTRIBUTE'也是一個內部框架的內部實現細節,它是預計不會被依賴。然而,它的工作,所以我接受了答案。 – Raghuram

3

這看起來非常像框架的內部實現細節,你不應該依賴它。

PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE的Javadoc說:

注:不需要這個屬性被所有HandlerMapping實現支持。基於URL的HandlerMappings通常會支持它,但處理程序不一定期望此請求屬性在所有情況下都存在。

如果行爲在3.0和3.1之間略有變化,我不會感到驚訝。

+0

謝謝。我看到了javadoc並意識到它是不可靠的。也許有人可以提出一個備用解決方案 - 本質上是一種在REST風格的URL中指定文件夾名稱的方法。從http://stackoverflow.com/questions/3686808/spring-3-requestmapping-get-path-value – Raghuram