事情背景
在日上日志观察中,发现当用户搜索词包含特殊符号%的时候,应用报错,报错信息为 java.lang.IllegalArgumentException: URLDecoder: Incomplete trailing escape (%) pattern。
数据走向
前端界面(浏览器自动encode)--->网关(透传)--->tomcat(自动decode)--->控制器--->rpc层
线上真实情况
用户界面输入词 | 浏览器请求 | tomcat | rpc |
壬二酸15% | %22%E5%A3%AC%E4%BA%8C%E9%85%B815%25 | 壬二酸15% | 手动decode,报错 |
%E5%A3%AC%E4%BA%8C%E9%85%B815%25 | %25E5%25A3%25AC%25E4%25BA%258C%25E9%2585%25B815%2525 | %E5%A3%AC%E4%BA%8C%E9%85%B815%25 | 壬二酸15% 错误,跟用户输入的请求有差异 |
问题分析&解决方案
线上真实进行时进行了2次urldecode,导致当存在%特殊符号的时候报错。目前在rpc层进行的decode是没有必要的且错误的,直接删掉即可
示例:
import java.net.URLDecoder;
public class Test {
public static void main(String[] args) {
try {
String keyword = "壬二酸10%";
String decode = URLDecoder.decode(keyword, "UTF-8");
System.out.println("原字符串为:"+keyword);
System.out.println("decode后字符串为:"+decode);
} catch (Exception e) {
e.printStackTrace();
}
}
}
错误信息:
java.lang.IllegalArgumentException: URLDecoder: Incomplete trailing escape (%) pattern
at java.net.URLDecoder.decode(URLDecoder.java:187)
at Test.main(Test.java:8)Process finished with exit code 0