HttpClient Get请求中返回中文乱码问题解决

来源:互联网 发布:大秦帝国 纵横 知乎 编辑:程序博客网 时间:2024/05/16 09:43

1、Get请求中中文乱码问题,在代码中修改了"utf-8"编码格式,在web.xml文件中也进行了相应的过滤"utf-8"编码格式,在tomacat中也配置了URIEncoding="UTF-8",但是在Get请求的时候,返回值依然是中文乱码。

 // 远程调用userCenter中的方法        String resultSemester = HttpTool.requestGet(                NxConfig.getGetSelectModelBySchoolIdJSONResult() + "?" + "clsSchoolId=" + clsSchoolId, null);

public static String requestGet(String url, Map<String, String> headers)throws IOException {return requestGet(null, url, headers, DEFAULT_CHARSET, false,DEFAULT_CONNECTION_TIMEOUT, DEFAULT_SOCKET_TIMEOUT);}

public static String requestGet(SSLContext sslContext, String url,Map<String, String> headers, String charset, boolean keepAlive,int connectTimeout, int socketTimeout) throws IOException {HttpClient httpClient = null;HttpGet get = null;HttpResponse response = null;try {// create builderHttpClientBuilder httpClientBuilder = createHttpClientBuilder(sslContext, headers, connectTimeout, socketTimeout);// invoke get requestget = new HttpGet(url);if (keepAlive) {get.addHeader("Connection", "Keep-Alive");} else {get.addHeader("Connection", "close");}logger.info("Executing get request:" + get.getURI());httpClient = httpClientBuilder.build();response = httpClient.execute(get);String res = EntityUtils.toString(response.getEntity(), charset);logger.debug("Response content from <" + get.getURI() + ">: " + res);return res;} finally {if (get != null) {get.abort();}}}

2、被远程调用的UserCenter中的方法

@ResponseBody    @RequestMapping("getSelectModelBySchoolIdJSONResult")    public String getSelectModelBySchoolIdJSONResult(String clsSchoolId,HttpServletResponse response) {        List<SelectModel> resultList = getSelectModelBySchoolId(clsSchoolId);                response.setHeader("Cache-Control", "no-cache");           response.setContentType("text/json;charset=UTF-8");          response.setCharacterEncoding("UTF-8");          try {            PrintWriter out = response.getWriter();              out.write(JSONObject.toJSONString(resultList));        } catch (IOException e) {            e.printStackTrace();        }          return null;    }
@ResponseBody@RequestMapping("getSelectModelBySchoolId")public List<SelectModel> getSelectModelBySchoolId(String clsSchoolId) {return baseSemesterService.getSelectModelBySchoolId(clsSchoolId);}


3、getSelectModelBySchoolIdJSONResult方法中加上了(HttpServletResponse response就可以防止返回值中中文乱码的问题了。