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

这是我编写的代码,如果让我们说 loadtest 字符串是 "test.version" 。由于某种原因,该期间不起作用。它只打印出“测试”

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

4

2 回答 2

0

它是避免 URI 中任何后缀的 Spring 智能方法。您有两种方法可以禁用它。

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

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

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

于 2015-09-29T16:19:01.330 回答
0

检查以下来自Spring 参考的报价:

默认情况下,Spring MVC 自动执行“. ”后缀模式匹配,以便映射到 /person 的控制器也隐式映射到 /person。. 这允许通过文件扩展名来指示内容类型,例如 /person.pdf、/person.xml 等。然而,一个常见的缺陷是当映射的最后一个路径段是 URI 变量时,例如 /person/{id}。虽然对 /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);
}
}
于 2015-09-29T18:21:49.217 回答