HTTP请求中的multipartentitybuilder乱码解决:
因为项目中使用了跨域HTTP请求,最后保存到数据库中一直出现乱码,如下图中的情况,前端传参数据,后台接收一直没定任何问题,最后逐步排查发现是HTTP请求中的请求头出了问题:
最后对比发现builder.addTextBody方法中缺少参数,原方法如下;
CloseableHttpClient httpClient = HttpClients.createDefault();
String result = "";
try {
HttpPost httpPost = new HttpPost(url);
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
// 设置表头信息
if (token != null) {
httpPost.setHeader("token",token);
}
Set<String> keySet = null;
if (params != null && params.size() > 0) {
keySet = params.keySet();
}
if (keySet != null) {
for(String key : keySet) {
builder.addTextBody(key, params.get(key));
}
}
HttpEntity entity = builder.build();
httpPost.setEntity(entity);
HttpResponse response = httpClient.execute(httpPost);// 执行提交
HttpEntity responseEntity = response.getEntity();
if (responseEntity != null) {
result = EntityUtils.toString(responseEntity, Charset.forName("UTF-8"));
}
} catch (IOException e) {
//异常处理
}
于是修改了请求的doPost方法,添加如下:
if (keySet != null) {
for(String key : keySet) {
ContentType contentType = ContentType.create("text/plain",Charset.forName("UTF-8"));
builder.addTextBody(key, params.get(key),contentType);
}
}
数据保存无问题。
成功解决,各个情况所面临的问题都不一样,此方法仅供参看。