最近敲代码时,需要调用其他服务的接口,主要是通过HttpClient去调用接口,这里记录调用时的方法以及中文乱码问题解决。
配置方法
话不多说,直接上代码
public static String doPostJson(String url, String jsonstr, String charset) {
HttpClient httpClient = null;
HttpPost httpPost = null;
String result = null;
try {
httpClient = new SSLClient();
httpPost = new HttpPost(url);
httpPost.addHeader("Content-Type", "application/json");
StringEntity se = new StringEntity(jsonstr,"UTF-8");
se.setContentType("text/json");
se.setContentEncoding(new BasicHeader("Content-Type", "application/json"));
httpPost.setEntity(se);
HttpResponse response = httpClient.execute(httpPost);
if (response != null) {
HttpEntity resEntity = response.getEntity();
if (resEntity != null) {
result = EntityUtils.toString(resEntity, charset);
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
return result;
}
调用接口服务
HashMap<String,Object> params = new HashMap<>();
params.put("aae019",dto.getAae019());
params.put("aac002",dto.getAac002());
params.put("aac003",dto.getAac003());
params.put("aae005",dto.getAae005());
params.put("cb222",dto.getCb222());
String acceptRes = HttpClientUtil.doPostJson("https://ggfw.gon.cn/web/xjy/external/modifyUserInfo", JSON.toJSONString(params), "UTF-8");
String message = JSONObject.parseObject(acceptRes).getString("type");
先把参数封装map集合,通过刚才的配置方法去调用接口,第一个参数为服务接口路径,第二个参数为字符串,第三个则是编码格式。acceptRes为接口调用返回结果,调用成功后会返回一个字符串。
解决中文乱码
这个中文乱码我也弄了一小会,在网上也搜索过,最后也是比较简单的成功解决这个问题。
StringEntity se = new StringEntity(jsonstr,"UTF-8");
这个问题关键就在这里,在配置方法中,创建StringEntity时,需要传入两个参数,第一个就是字符串参数,第二个则是需要传入编码格式,只有这里简单的添加一下,就能解决通过HttpClient调用其他服务接口传递参数包含中文乱码问题。