需求:第三方提供接口路径,在自己的项目中进行调用
注意点:调不通的时候排除接口本身的问题后,看看自己调用路径是不是正确的,有没多了或者少了【/】,参数的格式是不是跟接口文档的一致,再不行,那有可能是编码或者流处理的问题,我在实际开发中就是因为流处理的问题导致调不通。
POST
public static String post(String method,String urls,String params){
OutputStreamWriter out = null;
try
{
URL url = new URL(urls);//第三方接口路径
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
// 创建连接
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
conn.setRequestMethod(method);//请求方式 此处为POST
String token= "123456789";//根据实际项目需要,可能需要token值
conn.setRequestProperty("token", token);
conn.setRequestProperty("Content-type", "application/json");
conn.connect();
out = new OutputStreamWriter(conn.getOutputStream(), "utf-8");//编码设置
out.write(params);
out.flush();
out.close();
// 获取响应
BufferedReader reader = new BufferedReader( new InputStreamReader(conn.getInputStream()));
String lines;
StringBuffer sb = new StringBuffer();
while ((lines = reader.readLine()) != null ){
lines = new String(lines.getBytes(), "utf-8" );
sb.append(lines);
}
reader.close();
System.out.println(sb);
return sb.toString();
}catch(Exception e) {
e.printStackTrace();
}
return null;
}
GET
//根据各自需要返回数组或者字符串
//public static String getObject(String method,String urls,String params){
public static JSONArray getArray(String method,String urls,String params){
OutputStreamWriter out = null;
try{
URL url = new URL(urls);//接口路径
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setRequestMethod(method);//请求方法 此处为GET
conn.setDoInput(true);
conn.setDoOutput(true);
String token = "123456789";//请求头token
conn.setRequestProperty("token",token);
conn.connect();
int status = conn.getResponseCode();
System.out.println(status);
if(status == 200){
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));//怎么也调不通的时候,有可能流处理有问题
String str = "";
StringBuffer sb = new StringBuffer();
while((str=reader.readLine()) != null){
sb.append(str);
}
//返回字符串的话,就直接返回 sb.toString()
return JSONArray.parseArray(sb.toString());
}
System.out.println("请求服务失败,错误码为"+status);
}catch(Exception e){
e.printStackTrace();
}
return null;
}
用实体类进行接收返回值的话,需要将返回数据做下转换,转成我们需要的实体类格式
//返回数组转实体类
JSONArray sb = getArray(method,url,params);
if (sb!=null){
List<实体类> list = JSONObject.parseArray(sb.toJSONString(), 实体类.class);
return list;
}else {
throw new CustomException("调用接口失败");
}
//返回字符串转实体类
String json = JSONObject.toJSONString(params);
String sb = post(method,url,json);
JSONObject testJson = JSONObject.parseObject(sb);
实体类dto = JSON.toJavaObject(testJson,实体类.class);