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]&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>  

默认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转义序列。)