在做接口自动化测试的时候,遇到了一个带有json参数的post请求接口,由于请求的参数设置不对,导致一直返回415之后查询了httpclient对json参数的相关信息,终于完成了对该接口的调试,以下为实践步骤:
1.将json参数定义为一个字符串,用来传给接口(也可以直接传json数据):
String js = "{\"advice\":\"apiAutoTestForSaveAdvice\",\"adviceType\":\"1\",\"info\":\"contact\"}";
2.设置post请求header信息:
httpPost.setHeader("Content-Type", "application/json;charset=UTF-8");
3.设置post请求的entity类型:
StringEntity se = new StringEntity(js);
se.setContentType("TEXT/JSON");
到此为止,该接口就可以正常调试,贴上完整代码:
@Test
public void saveAdvice() throws UnsupportedEncodingException {
String js = "{\"advice\":\"apiAutoTestForSaveAdvice\",\"adviceType\":\"1\",\"info\":\"contact\"}";
System.out.println("保存意见接口");
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
HttpPost httpPost = new HttpPost(baseUrl+url);
httpPost.addHeader("cookie",cookie);
//设置json格式的参数
httpPost.setHeader("Content-Type", "application/json;charset=UTF-8");
StringEntity se = new StringEntity(js);
se.setContentType("TEXT/JSON");
httpPost.setEntity(se);
try {
CloseableHttpResponse response = httpClient.execute(httpPost);
System.out.println("response信息为: "+response);
HttpEntity entity = response.getEntity();
System.out.println("entity信息为: "+ EntityUtils.toString(entity));
response.close();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
httpClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}