gpt4 book ai didi

SpringMVC @PathVariable 被截断

转载 作者:行者123 更新时间:2023-12-04 21:15:50 28 4
gpt4 key购买 nike

我正在使用 SpringMVC 3.1.3。
@PathVariable 如果最后有空格,则会被截断/修剪。有没有办法防止修剪

 @RequestMapping(value="deleteConfig/{id}/", method=RequestMethod.DELETE)
public @ResponseBody JsonResponse<?> deleteConfig(@PathVariable("id") String id)

如果来自客户端的 id 最后有一个空格,比如“abc”甚至“abc%20”,那么我在 Controller 中得到的变量 id 只是“abc”而不是“abc”

你能建议一种方法来解决这个问题吗

最佳答案

问题出在 Spring Framework 的 AntPatternMatcher 类中。 MVC 使用此类根据模式查找必须调用的方法和 Controller ,但它也负责提取路径变量。

如果你查看这个类,你可以看到:

    String[] pattDirs = StringUtils.tokenizeToStringArray(pattern, this.pathSeparator);
String[] pathDirs = StringUtils.tokenizeToStringArray(path, this.pathSeparator);

这会调用以“/”分隔的标记对 url 进行标记化,但也会修剪字符串。简单的方法是将第二行改为:
    String[] pathDirs = StringUtils.tokenizeToStringArray(path, this.pathSeparator, false, true);

此调用 'false' 表示您不想修剪字符串。

但坏消息是这个类是在 spring 框架中的。然后你需要扩展这个类或复制并更改它并指示 spring 使用你自己的类而不是 spring 类。

您需要像这样更改 Web 上下文中的 DefaultAnnotationHandler:
<bean
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="pathMatcher">
<bean class="practica1.impl.OwnAntPathMatcher" />
</property>
</bean>

在这行中,您显式地创建了“DefaultAnnotationHandlerMapping”并为您修改后的 AntPathMatcher 版本建立了 PathMatcher。

请小心,因为如果您在上下文中显式创建一个处理程序映射,则不会创建所有其他默认处理程序。

关于SpringMVC @PathVariable 被截断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23797077/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com