您的位置:首页 > 理论基础 > 计算机网络

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

2017-06-01 19:21 507 查看
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 builder
HttpClientBuilder httpClientBuilder = createHttpClientBuilder(
sslContext, headers, connectTimeout, socketTimeout);

// invoke get request
get = 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)就可以防止返回值中中文乱码的问题了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: