最近在做一个项目,因一些机制问题,需要我用java代码调用第三方接口。因其接口使用的是@RequestBody注入访问对象的,@RequestBody接受收的是一个json格式的字符串,一定是一个字符串。类似于:
{
“pageNumber”:1,
“pageSize”:10
}
这种json字符串访问方式。
要想在java后端代码中访问第三方接口,首先引入maven包。
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.9</version>
</dependency>
POST请求封装的工具方法:
public static String HttpURLConnection(String url, JSONObject data) {
StringBuffer sb = new StringBuffer();
try {
URL realUrl = new URL(url);
//将realUrl以open方法返回的urlConnection 连接强转为HttpURLConnection连接
HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();// 此时cnnection只是为一个连接对象,待连接中
//设置连接输出流为true,默认false
connection.setDoOutput(true);
//设置连接输入流为true
connection.setDoInput(true);
//设置请求方式为post
connection.setRequestMethod("POST");
//post请求缓存设为false
connection.setUseCaches(false);
//设置该HttpURLConnection实例是否自动执行重定向
connection.setInstanceFollowRedirects(true);
//设置请求头里面的各个属性
connection.setRequestProperty("Content-Type", "application/json;charset=utf-8");
//建立连接
connection.connect();
//创建输入输出流,用于往连接里面输出携带的参数
DataOutputStream dataout = new DataOutputStream(connection.getOutputStream());
String query = data.toString();
//将参数输出到连接
dataout.write(query.getBytes("UTF-8"));
// 输出完成后刷新流
dataout.flush();
//关闭流
dataout.close();
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
String lines;
while ((lines = reader.readLine()) != null) {
lines = new String(lines.getBytes(), "utf-8");
sb.append(lines);
}
reader.close();
connection.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
return sb.toString();
}
在服务层中调用方法例子:
//输入的Json参数
JSONObject jsonObject = new JSONObject();
//添加访问参数
jsonObject.append("pageNumber", 1);
jsonObject.append("pageSize",10);
//输入第三方url
String packStr=HttpURLConnection("http://**:8080/login/info", jsonObject);
通过以上操作即可返回访问的接口参数,通过类型转换即可使用。
此方法也是我在多次验证保证完全可行的一种方法,如果直接用params参数访问url我会在第二篇博客里面进行解答。刚进入社区,希望各位大神们多多帮助,共同进步。