Spring MVC Rest,使用URL、转义字符和;amp;导致在控制器中获取值的问题
我有一个控制器映射,如下所示Spring MVC Rest,使用URL、转义字符和;amp;导致在控制器中获取值的问题,rest,spring-mvc,Rest,Spring Mvc,我有一个控制器映射,如下所示 @RequestMapping(value = { "/search"}, method = RequestMethod.GET) public @ResponseBody Object searchProducts(@PathVariable("query") String query, @RequestParam(value = "param1", required = false) String param1, @RequestParam(value
@RequestMapping(value = { "/search"}, method = RequestMethod.GET)
public @ResponseBody
Object searchProducts(@PathVariable("query") String query,
@RequestParam(value = "param1", required = false) String param1,
@RequestParam(value = "param2", required = false) String param2,)
当我使用下面给出的url时,它工作得很好,我甚至得到了spring填充的值
http://host/app_name/search?param1=[value]¶m2=[value]
但当使用转义字符时,它会中断
http://host/app_name/search?param1=[value]&param2=[value]
springcontext或web.xml中是否有允许我自动处理编码的配置??
我已经尝试过在web.xml中设置contect,但它不起作用
<context-param>
<param-name>defaultHtmlEscape</param-name>
<param-value>true</param-value>
</context-param>
默认HTMLescape
符合事实的
&
是一个HTML转义序列,在URL中不需要将其视为&
。因此,最好修复您的内部系统,以使其生成正确的URL
但是,如果由于某种原因无法解决此问题,可以通过以下(黑客)方式解决此问题:
- 创建一个
,将原始过滤器
包装到HttpServlerRequest
的子类中HttpServlerRequestWrapper
- 在该子类中,创建一个“固定”参数的映射(即从原始请求获取参数,并通过从参数名称的开头剥离
来创建一个新的参数映射),并重写amp;
方法以使用该映射getParameter*()
&
是一个HTML转义序列,在URL中不需要将其视为&
。因此,最好修复您的内部系统,以使其生成正确的URL
但是,如果由于某种原因无法解决此问题,可以通过以下(黑客)方式解决此问题:
- 创建一个
,将原始过滤器
包装到HttpServlerRequest
的子类中HttpServlerRequestWrapper
- 在该子类中,创建一个“固定”参数的映射(即从原始请求获取参数,并通过从参数名称的开头剥离
来创建一个新的参数映射),并重写amp;
方法以使用该映射getParameter*()
- 可以理解,Spring将其视为值的一部分,
&;'
是HTML编码的,而不是URL编码的
我将试图弄清楚为什么系统将'&
编码为'&;'代码>而不是构建适当的GET字符串
如果您想在GET参数的值中实际包含一个与符号,请使用%26,当通过URL时,它将解码为“&”。可以理解,Spring会将其视为值的一部分,”&
是HTML编码的,而不是URL编码的
我将试图弄清楚为什么系统将'&
编码为'&;'代码>而不是构建适当的GET字符串
如果要在GET参数的值中实际包含一个符号AND,请使用%26,当通过URL传递时,它将解码为“&”。尝试:
HtmlUtils.htmlUnescape(query);
尝试:
你到底想达到什么目的?为什么您需要通过&代码>在URL中?我正在传递多个请求参数,标准方式参数标准方式URL?param1=value1¶m2=value2,但是当用户通过内部系统输入或调用时,有时它会有“&;”这是“&”的转义字符,spring会忽略它或将其作为值的一部分处理。您到底想实现什么?为什么您需要通过&代码>在URL中?我正在传递多个请求参数,标准wayparameters标准WayURL?param1=value1¶m2=value2,但当用户通过内部系统输入或调用时,有时它会有“&;”这是“&”的转义字符,spring会忽略它或将其作为值的一部分处理。哇,我们发布的内容基本上完全相同=(非常感谢你的回复,这对我帮助很大。我们将错失html转义序列哇,我们发布了基本上完全相同的东西=(非常感谢你的回复,这对我帮助很大。我们将错失html转义序列。)