1

我有一个控制器映射如下

 @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.xml 中设置以下 contect 但它不起作用

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

3 回答 3

3

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

但是,如果由于某种原因您不能这样做,您可以通过以下(hackish)方式解决此问题:

  • 创建一个Filter将原始包装HttpServlerRequest到您的子类中的HttpServlerRequestWrapper.
  • amp;在该子类中创建“固定”参数的映射(即从原始请求中获取参数并通过从参数名称的开头剥离来创建新的参数映射)并覆盖getParameter*()使用该映射的方法。
于 2012-06-06T14:48:10.843 回答
2

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

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

如果您想在 GET 参数的值中实际包含一个 & 符号,请使用 %26 ,它在通过 URL 传递时解码为 '&'。

于 2012-06-06T14:48:44.317 回答
0

尝试:

HtmlUtils.htmlUnescape(query);
于 2018-02-17T05:46:40.667 回答