使用httpClient的POST方式调用webservice服务产生中文乱码问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Jack_PJ/article/details/80300930

今天遇到做项目需要使用httpClient来远程调用webservice服务,此项目中调用服务的一端和服务端都使用

org.springframework.web.filter.CharacterEncodingFilter过滤器来进行设置以POST方式提交数据的编码格式,但是服务端获取到的数据中文还是一直乱码。

以下是自己写的httpClient工具类的一个方法:

public static String doPost(String url, Map<String, String> param) {
		// 创建Httpclient对象
		CloseableHttpClient httpClient = HttpClients.createDefault();
		CloseableHttpResponse response = null;
		String resultString = "";
		try {
			// 创建Http Post请求
			HttpPost httpPost = new HttpPost(url);
			// 创建参数列表
			if (param != null) {
				List<NameValuePair> paramList = new ArrayList<>();
				for (String key : param.keySet()) {
					paramList.add(new BasicNameValuePair(key, param.get(key)));
				}
				// 模拟表单,此时需要设置数据的编码格式,否则默认会以ISO_8859_1进行编码
				UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList,"UTF-8");
				httpPost.setEntity(entity);
			}
			// 执行http请求
			response = httpClient.execute(httpPost);
			resultString = EntityUtils.toString(response.getEntity(), "utf-8");
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				response.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

		return resultString;
	}

如果在 UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList,"UTF-8");不指定编码方式的话,经过查看源码发现会默认使用iso-8859-1对数据进行编码,这就是导致乱码的原因。



虽然解决了这个问题,但是还是有个疑惑,为什么明明使用org.springframework.web.filter.CharacterEncodingFilter过滤器对post方式的数据的进行了编码设置,但是还是需要在httpCilent中进行指定呢?如有高手知道,望告知!!!

展开阅读全文

没有更多推荐了,返回首页