我有一个控制器映射如下
@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中设置下面的参数,但它不起作用
<context-param>
<param-name>defaultHtmlEscape</param-name>
<param-value>true</param-value>
</context-param>
答案 0 :(得分:3)
&
是一个HTML转义序列,没有要求将其视为URL中的&
。因此,最好修复内部系统,以使其生成正确的URL。
但是,如果由于某种原因无法执行此操作,则可以通过以下(hackish)方式解决此问题:
Filter
,将原始HttpServlerRequest
包装到HttpServlerRequestWrapper
的子类中。amp;
来创建新的参数映射)并覆盖getParameter*()
方法使用那张地图。答案 1 :(得分:2)
有意义的是,Spring会将其视为值的一部分,'&'
是HTML编码,而不是URL编码。
我会试着弄清楚系统为什么将'&'
编码为'&'
而不是构建正确的GET字符串。
如果您想在GET参数的值中实际包含&符号,请使用%26解码为'&amp;'通过URL传递时。
答案 2 :(得分:0)
尝试:
HtmlUtils.htmlUnescape(query);