2012-11-16 85 views
0

我對Spring的@RequestMapping註解的行爲感到困惑。在以下代碼中,test()映射到"/test",而test_test()映射到"/test/test/test"。這裏發生了什麼?如果我想將test()映射到"/test/test",我該怎麼辦?如何將「/ test/test」映射到映射到「/ test」的控制器的方法?

package com.mvc.spring; 

import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 

@Controller 
@RequestMapping(value = "/test") 
public class Test { 
    @RequestMapping(value = "/test", method = RequestMethod.GET) 
    String test() { 
     return "test"; 
    } 

    @RequestMapping(value = "/test/test", method = RequestMethod.GET) 
    String test_test() { 
     return "test"; 
    } 
} 
+0

嘗試.... @ RequestMapping({ 「/測試」, 「/測試/測試」}) – user533

+0

你可以做的另一種方式是去除requestmapping(控制器註釋後) – user533

+0

@PratapMurukutla那請問不行。該日誌說'映射「{[/測試|| /測試/測試/測試],...'。 –

回答

1

春天是否故意這樣做;當方法和類型級別的請求映射模式值匹配時,它只使用其中的一個。 @see org.springframework.util.AntPathMatcher#combine()

一種方法是後綴「/」在方法層面RequestMapping值(如下),讓您可以使用"/test/test/"作爲URL(/test/test着,當然)。

@Controller 
@RequestMapping(value = "/test") 
public class Test { 
    @RequestMapping(value = "/test/", method = RequestMethod.GET) 
    String test() { 
     return "test"; 
    } 
} 

不知道爲什麼沒有記錄。

因此,我認爲剩下的唯一方法是匹配"/test/test"網址是使用URI模板模式。

@Controller 
@RequestMapping(value = "/test") 
public class Test { 
    @RequestMapping(value = "/{anythinghere}", method = RequestMethod.GET) 
    String test() { 
     return "test"; 
    } 
} 
+0

感謝您的回答,但''/ {anythinghere}「'也匹配'」/ test /「'後跟任何字符串, 「/ test/abc」' –

+0

是的,當然,這就是爲什麼我在這裏提到任何:) – Vinay

+0

所以沒有辦法映射到''/ test/test''嗎?它是一個spring框架的bug嗎? –