解决retrofit2.adapter.rxjava.HttpException: HTTP 400 错误
前言
最近项目中遇到一件怪事,在get请求中发现没有数据,在debug时候发现居然报了一个retrofit2.adapter.rxjava.HttpException: HTTP 400错误。经过查阅资料发现400 请求出错
由于语法格式有误,服务器无法理解此请求。不作修改,客户程序就无法重复此请求。但是我把请求的完整参数发到postman中请求发现没有问题。正在觉得怪异的时候,请求参数中|这个特殊字符串引起了我的注意。
通过在OKhttp 拦截器中打印出本次请求路径发现,所有的参数都是被编码了,但是|这个特殊字符却没有编码。
String path = "";
try {
LogUtils.error("path" + departmentBean.getPath());
path = new String(departmentBean.getPath().getBytes(), "utf-8");
path = URLEncoder.encode(path, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
通过对路径参数也就是包含 | 特殊字符的参数进行编码过后问题就解决了。