2015-09-29 17 views
0
@RequestMapping(value = "/newLoadtest/{loadtest}", method = RequestMethod.POST) 
public @ResponseBody void addNewLoadTest(@PathVariable("loadtest") String loadtest) { 
     System.out.println(loadtest); 
} 

這是我寫的代碼,如果讓我們說loadtest字符串是「test.version」。由於某些原因,這段時間不起作用。它打印出「測試」只春季Restful服務URL編碼問題與「。」

我認爲這裏的問題可能是編碼的網址,但我不知道如何去做。請幫助

+0

閱讀http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#mvc-ann-requestmapping-suffix-pattern-match –

回答

0

它的春天是避免URI中任何後綴的聰明方式。你有兩種方法來禁用它。

在路徑變量定義之後加上「:。+」。

@RequestMapping(value = "/newLoadtest/{loadtest:.+}", method = RequestMethod.POST) 

另一種方法是使用 自己的「DefaultAnnotationHandlerMapping」和禁止「useDefaultSuffixPattern」爲假。

0

檢查以下引自Spring reference

默認情況下,Spring MVC的,這樣一個控制器映射到/人,也含蓄地映射到/人自動執行後綴模式匹配「。」。這允許通過文件擴展來指示內容類型,例如, /person.pdf,/person.xml等。然而,一個常見的缺陷是映射的最後一個路徑段是一個URI變量,例如, /人/(編號)。對/person/1.json的請求將正確地導致路徑變量id = 1和擴展名「.json」,當id自然包含一個點時,例如, /person/[email protected]結果與預期不符。顯然這裏「.com」不是文件擴展名。

,如果你不希望使用擴展內容協商可以通過這條線下面的代碼configurer.setUseSuffixPatternMatch(false);禁用它或者我想下面的解決方案是最好只用註冊的後綴,它是由您的需求

@Configuration 
@EnableWebMvc 
public class WebConfig extends WebMvcConfigurerAdapter { 

@Override 
public void configurePathMatch(PathMatchConfigurer configurer) { 
    //configurer.setUseSuffixPatternMatch(false);//this will disable all suffices from negotiation 
    configurer.setUseRegisteredSuffixPatternMatch(true); 
} 
}