Spring MVC Rest,使用 URL、转义字符调用并导致在控制器中获取值的问题



我有一个控制器映射如下

 @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]&param2=[value]

但是当使用转义字符时,它会中断

 http://host/app_name/search?param1=[value]&param2=[value]

在 springcontext 或 web 中是否有任何配置.xml这将允许我自动处理编码?我已经尝试在 Web 中设置下面的 contect.xml但它不起作用

 <context-param> 
 <param-name>defaultHtmlEscape</param-name> 
 <param-value>true</param-value> 
 </context-param>  

&amp;是一个 HTML 转义序列,不需要将其视为 URL 中的&。因此,最好修复您的内部系统,以使其生成正确的URL。

但是,如果由于某种原因无法执行此操作,则可以通过以下方式解决此问题(hackish):

  • 创建一个Filter,将原始HttpServlerRequest包装到HttpServlerRequestWrapper子类中。
  • 在该子类中,创建一个"固定"参数的映射(即从原始请求中获取参数,并通过从参数名称的开头剥离amp;来创建新的参数映射)并覆盖getParameter*()使用该映射的方法。

Spring 会将其视为值的一部分是有意义的,'&amp;'它是 HTML 编码的,而不是 URL 编码的。

我会尝试弄清楚为什么系统将'&'编码为 '&amp;' 而不是构建正确的 GET 字符串。

如果要在 GET 参数的值中实际包含与号,请使用 %26,它在通过 URL 传递时解码为"&"。

尝试:

HtmlUtils.htmlUnescape(query);

最新更新