自定义拦截器,写入中文公参,写入时正常,网络请求时却变成乱码。代码和抓包记录如下:

问题代码示例参考如下:
private encryptParams(config: InternalAxiosRequestConfig) { config.transformRequest = (data: ESObject) => { const allParams = new HashMap<string, string>(); const safeData: ESObject = (data && typeof data === 'object') ? data : {}; let urlEncode = false if (config.headers['Content-Type'] === 'application/x-www-form-urlencoded') { urlEncode = true } allParams.setAll(this.getUserParams(safeData, urlEncode)); if (allParams.hasKey(this.SIGNATURE_KEY)) { allParams.remove(this.SIGNATURE_KEY); } allParams.set('trader', ClientInfo.getInstance().getTrader()); allParams.set('traderName', ClientInfo.getInstance().getTraderName()); allParams.set('provinceId', '1') allParams.set('province', '1') allParams.set('provinceName', '上海') allParams.set('cityName', '上海') allParams.set('locateProvinceId','') allParams.set('locateCityName','') return this.getParamsUrl(allParams, urlEncode) } }
当'content-Type'为'application/x-www-form-urlencoded'时,请求提交的信息主体数据必须在key和value进行URL转码后(encodeURIComponent/encodeURI),按照键值对"key1=value1&key2=value2&key3=value3"的方式进行编码。