Spring Restful服务URL编码问题"。"

时间:2015-09-29 16:06:25

标签: java http spring-mvc url-encoding spring-restcontroller

@RequestMapping(value = "/newLoadtest/{loadtest}", method = RequestMethod.POST)
public @ResponseBody void addNewLoadTest(@PathVariable("loadtest") String loadtest) {
        System.out.println(loadtest);
}

这是我编写的代码,如果可以说loadtest字符串是" test.version" 。由于某种原因,这段时间不起作用。它打印出" test"仅

我认为这里的问题可能是对网址进行编码,但我不知道该怎么做。请帮忙

2 个答案:

答案 0 :(得分:0)

它的spring是避免URI中任何后缀的聪明方法。您有两种方法可以禁用它。

在路径变量定义后添加“:。+”。

ng-app

另一种方式是 使用您自己的“DefaultAnnotationHandlerMapping”并禁用“useDefaultSuffixPattern”为false。

答案 1 :(得分:0)

检查以下Spring reference的引用:

  

默认情况下,Spring MVC自动执行“。”后缀模式匹配,以便映射到/ person的控制器也隐式映射到/ person。。这允许通过文件扩展名指示内容类型,例如,然而,常见的缺陷是当映射的最后一个路径段是URI变量时,例如,/ person.pdf,/ person.xml等。 /人/(编号)。虽然对/person/1.json的请求将正确地导致路径变量id = 1和扩展名“.json”,但当id自然包含点时,例如/person/joe@email.com结果与预期不符。显然,这里“.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);
}
}