问题描述:
项目对接一个第三方接口,使用postMethod的方式发送请求。发现服务器端接收到的请求,body为空。但打印请求日志时,请求参数已正常加载。使用postman测试时,可正常访问。
请求代码如下:
SignResponse res=new SignResponse();
HttpClient hc=new HttpClient();
PostMethod postmethod = new PostMethod(requestURL);
postmethod.setRequestHeader("Content-Type","application/json");
postmethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 5000);
try {
RequestEntity entity=new StringRequestEntity(reqjson);
postmethod.setRequestEntity(entity);
int httpstatus=hc.executeMethod(postmethod);
InputStream resStr=postmethod.getResponseBodyAsStream();
BufferedReader br = new BufferedReader(new InputStreamReader(resStr));
StringBuffer stringBuffer = new StringBuffer();
String str1= "";
while((str1 = br.readLine()) !=null){
System.out.println(str1);
stringBuffer.append(str1);
}
String sb=stringBuffer.toString();
String result = new String(sb.getBytes(),"UTF-8");
System.out.println("resStr:"+result);
Gson gson=new Gson();
res=gson.fromJson(result, SignResponse.class);
System.out.println("res:"+res);
} catch (HttpException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return res;
原因分析:
postman可正常访问,说明服务端接口与参数均无问题。问题原因肯定是出在发送的方法设置中。多方排查无果后,突然想到,是否为编码的问题。因为本项目使用GBK编码,第三方接口使用UTF-8编码。于是我设置了编码
RequestEntity entity=new StringRequestEntity(reqjson,"application/json" ,"UTF-8");
而后可正常发送。