使用SSM架构创建了一个solr服务层,通过HttpClient doPost()请求带string字符串参数访问服务,发现拦截器接收到的String乱码,问题出在String字符串是json格式!!!
- 解决方法
“
java
// 封装Httpclient请求
public static String doPostJson(String url, String json) {
// 创建Httpclient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse response = null;
String resultString = "";
try {
// 创建Http Post请求
HttpPost httpPost = new HttpPost(url);
// 创建请求内容
StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);
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) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return resultString;
}
//调用search服务
private TaotaoResult importItem(TbItem tbItem) throws UnsupportedEncodingException {
try {
String tbitem = JsonUtils.objectToJson(tbItem);
HttpClientUtil.doPostJson(SEARCH_ITEM_SYNC_URL,tbitem);
}catch (Exception e){
return new Result(500);
}
return new Result(200);
}
//拦截请求url
@RequestMapping(value = "/manager/updateindex",method = RequestMethod.POST)
@ResponseBody
public TaotaoResult updateIndex(HttpServletRequest request) throws Exception {
// 读取请求内容
BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream()));
String line = null;
StringBuilder sb = new StringBuilder();
while((line = br.readLine())!=null){
sb.append(line);
}
// 将资料解码
String reqBody = sb.toString();
String content = new String(reqBody.getBytes("UTF-8"));
Result Result = itemService.updateItemIndex(content);
return Result;
}