利用HttpClient调用其他服务的接口,以及解决使用HttpClient中文乱码问题

最近敲代码时,需要调用其他服务的接口,主要是通过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调用其他服务接口传递参数包含中文乱码问题。