Spring @PathVariable没有斜杠(带IP地址的字符串)

时间:2014-07-25 00:47:55

标签: java json spring url path-variables

这是我的控制器的一部分:

@RequestMapping(value="/json/getPCs/{serverAddress}", method=RequestMethod.GET)
public @ResponseBody List<PC> getPCForServerJSON(@PathVariable String serverAddress) {
    logger.info("Server address: " + serverAddress);
    return PCManager.findByServer(serverManager.findByAddress(serverAddress));
}

在浏览器中,我访问了网址http://localhost:8080/test/pc/json/getPCs/192.168.200.1

在日志中我看到了:

INFO : net.example.test.PCController - Server addres: 192.168.200

如果我使用斜杠到URL http://localhost:8080/test/pc/json/getPCs/192.168.200.1/就可以了:

INFO : net.example.test.PCController - Server addres: 192.168.200.1

为什么呢?我想使用url而不用斜杠。

1 个答案:

答案 0 :(得分:1)

RequestMappingHandlerMapping配置为创建PatternsRequestCondition个实例(与您的路径段匹配),而不添加匹配的后缀。

WebMvcConfigurationSupport中,覆盖以下

@Override
public RequestMappingHandlerMapping requestMappingHandlerMapping() {
    RequestMappingHandlerMapping mapping = super.requestMappingHandlerMapping();
    mapping.setUseSuffixPatternMatch(false);
    return mapping;
}

默认情况下启用该配置参数(true

  

如果启用了映射到&#34; / users&#34;也匹配&#34; / users。*&#34;。

所以你的路径段

{serverAddress}

实际上是匹配

{serverAddress}[.].*
//              ^ literally a dot

所以给出了值

192.168.200.1

仅捕获

192.168.200

禁用它会为您提供所需的行为。