最近在写 SpringBoot 项目时, 发现了有参数传递到服务器后与原来的参数不一样,当时一脸懵,后来一查发现,因为项目用到了 AES 加密,加密后的参数含有一些特殊的字符,在 URL 中传参数时直接使用一些特殊字符,在服务器端接收的时候经常出现数据丢失或者错误的情况。
经过我的测试,参数中含有特殊字符”+”,”%”,”#”,”&”都将出现数据丢失或者错误的情况。
+ 表示空格 %2B
% 指定特殊字符 %25
#表示书签 %23
& URL 中指定的参数间的分隔符 %26
例如想要传递参数中含有 + 时,就先把 + 替换成 %2B,这时候服务器接收到的参数就和浏览器传递的参数一致了。
Java 提供了 URLEncoder 类,可以解决上面的问题,将参数中的特殊字符替换成它所对应的编码,不用自己手动替换。代码如下:
URLEncoder.encode(username, "UTF-8")
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于