当尝试使用Spring MVC时,我注意到传递给使用@PathVariable注释的控制器参数的值将具有最后一个'的所有字符。去除后,除非最后一个字符是'/'。

例如,给出以下代码:

@RequestMapping("/host/${address})"
public String getHost(@PathVariable String address, Model model) {
    model.addAttribute("host", hostRepository.getHost(address));
    return "host";
}


如果URL是“ /host/127.0.0.1”,则address的值将是“ 127.0.0”。如果URL是“ /host/127.0.0.1/”,则address的值将是“ 127.0.0.1”。

有没有防止这种剥离的方法?

最佳答案

他们的问题跟踪器中已经有很多此类报告(例如,SPR-5778)。但是他们没有解决它,因此这似乎是合法的行为。

官方解决方法是在useDefaultSuffixPattern = false上设置DefaultAnnotationHandlerMapping,但是它有几个缺点:


适用于所有控制器
它完全禁用扩展处理(例如,对于ContentNegotiationViewResolver
它打破了“斜线无关紧要”的规则


here所述,更复杂的解决方法是使用自定义的PathMatcher

08-18 12:20
查看更多