dog*_*ish 5 spring spring-mvc spring-annotations
我正在使用SpringMVC 3.1.3.如果@PathVariable最后有空格,则会截断/修剪它.有没有办法阻止修剪
@RequestMapping(value="deleteConfig/{id}/", method=RequestMethod.DELETE)
public @ResponseBody JsonResponse<?> deleteConfig(@PathVariable("id") String id)
Run Code Online (Sandbox Code Playgroud)
如果来自客户端的id最后有一个空格,比如 - "abc"或者甚至是"abc%20"那么我在控制器中得到的变量id只是"abc"而不是"abc"
你能建议一种方法来解决这个问题
问题出在Spring框架的AntPatternMatcher类中。MVC 使用此类来查找必须根据模式调用哪些方法和控制器,但它也负责提取路径变量。
如果你查看这个类,你可以看到:
String[] pattDirs = StringUtils.tokenizeToStringArray(pattern, this.pathSeparator);
String[] pathDirs = StringUtils.tokenizeToStringArray(path, this.pathSeparator);
Run Code Online (Sandbox Code Playgroud)
这会调用 tokenizen 中以“/”分隔的标记中的 url,但也会修剪字符串。简单的方法是将第二行更改为:
String[] pathDirs = StringUtils.tokenizeToStringArray(path, this.pathSeparator, false, true);
Run Code Online (Sandbox Code Playgroud)
此调用“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>
Run Code Online (Sandbox Code Playgroud)
通过此行,您显式创建“DefaultAnnotationHandlerMapping”并将 PathMatcher 建立到您修改后的 AntPathMatcher 版本。
请务必小心,因为如果您在上下文中显式创建一个处理程序映射,则不会创建所有其他默认处理程序。
| 归档时间: |
|
| 查看次数: |
916 次 |
| 最近记录: |