前端请求地址含特殊字符"+"后端接收数据显示空格

发布时间 2023-09-07 14:32:44作者: new_bird_90

问题描述:

  前端测试Get请求访问,path中的参数含有加号,后端过滤器中使用request.getParameter()方法无法获取。

  请求地址:http://localhost:8899/bookmark/getByUser?encryData=g3DGtZnczC7SUm+vRvkaYg==

  后端过滤器中接收参数如图所示,其中查询字符串是request.getQueryString()方法结果,请求参数是request.getParameter("encryData")结果:

   

分析步骤:

  1、url中存在特殊字符,需要进行编码处理。

  url编码值如下:

空格 - %20
” - %22
# - %23
% - %25
& - %26
( - %28
) - %29
+ - %2B
, - %2C
/ - %2F
: - %3A
; - %3B
< - %3C
= - %3D
> - %3E
? - %3F
@ - %40
\ - %5C
| - %7C

  url特殊字符转义如下:

URL中一些字符的特殊含义,基本编码规则如下:
1、空格换成加号(+)
2、正斜杠(/)分隔目录和子目录
3、问号(?)分隔URL和查询
4、百分号(%)制定特殊字符
5、#号指定书签
6、&号分隔参数

解决方案:

  前端使用encodeURIComponent()函数进行转义。

注:

  •  ApiPost工具调试请求时,处理特殊字符以下两种方法:
  1. 前端需转义2次;
  2. 使用工具自带的encodeURUComponent工具转换。

 

 思路:主要参考restTemplate请求原理,发现前端请求url需要进行二次编码后,通过APiPost发送的url在后端接收参数时才可正常接收。即“+” --> “%2B” --> "%252B"。