解決retrofit2.adapter.rxjava.HttpException: HTTP 400 錯(cuò)誤
前言
??最近項(xiàng)目中遇到一件怪事,在get請(qǐng)求中發(fā)現(xiàn)沒(méi)有數(shù)據(jù),在debug時(shí)候發(fā)現(xiàn)居然爆了一個(gè)retrofit2.adapter.rxjava.HttpException: HTTP 400錯(cuò)誤。經(jīng)過(guò)查閱資料發(fā)現(xiàn)400 請(qǐng)求出錯(cuò)
??由于語(yǔ)法格式有誤,服務(wù)器無(wú)法理解此請(qǐng)求。不作修改,客戶程序就無(wú)法重復(fù)此請(qǐng)求。但是我把請(qǐng)求的完整參數(shù)發(fā)到postman中請(qǐng)求發(fā)現(xiàn)沒(méi)有問(wèn)題。正在覺(jué)得怪異的時(shí)候,請(qǐng)求參數(shù)中|這個(gè)特殊字符串引起了我的注意。
通過(guò)在OKhttp 攔截器中打印出本次請(qǐng)求路徑發(fā)現(xiàn),所有的參數(shù)都是被編碼了,但是|這個(gè)特殊字符卻沒(méi)有編碼。
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();
}
通過(guò)對(duì)路徑參數(shù)也就是包含 | 特殊字符的參數(shù)進(jìn)行編碼過(guò)后問(wèn)題就解決了。