java一个接口调取另一个接口
工具类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
package com.utils;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import org.apache.log4j.Logger;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.userbackend.controller.UserInfoController;
import com.userbackend.model.User;
//调取接口方法
public class ToInterface {
/**
* 调测日志记录器。
*/
private static final Logger DEBUGGER = Logger.getLogger(UserInfoController. class );
/**
* 调用对方接口方法
*
* @param path
* 对方或第三方提供的路径
* @param data
* 向对方或第三方发送的数据,大多数情况下给对方发送JSON数据让对方解析
* @param requestMethod
* 请求方式
*
*/
public static StringBuffer interfaceUtil(String path, Object data, String requestMethod) {
StringBuffer sb = new StringBuffer();
DEBUGGER.info( "请求数据:" + data);
try {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // 打开和url之间的连接
PrintWriter out = null ;
conn.setRequestMethod(requestMethod); // 请求方式
// 设置通用的请求属性
conn.setRequestProperty( "accept" , "*/*" );
conn.setRequestProperty( "connection" , "Keep-Alive" );
//设置传到另一个接口的格式为json
conn.setRequestProperty( "Content-Type" , "application/json;charset=UTF-8" );
conn.setRequestProperty( "user-agent" , "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" );
// 设置是否向httpUrlConnection输出,设置是否从httpUrlConnection读入,此外发送post请求必须设置这两个
// 最常用的Http请求无非是get和post,get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给servlet,
// post与get的 不同之处在于post的参数不是放在URL字串里面,而是放在http请求的正文内。
conn.setDoOutput( true );
conn.setDoInput( true );
// allowUserInteraction 如果为 true,则在允许用户交互(例如弹出一个验证对话框)的上下文中对此 URL 进行检查。
conn.setAllowUserInteraction( false );
// 获取URLConnection对象对应的输出流
out = new PrintWriter(conn.getOutputStream());
// 发送请求参数即数据
out.print(data);
// 缓冲数据
out.flush();
out.close();
// 获取URLConnection对象对应的输入流
InputStream is = conn.getInputStream();
// 构造一个字符流缓存
BufferedReader br = new BufferedReader( new InputStreamReader(is));
String str = "" ;
while ((str = br.readLine()) != null ) {
sb.append(str);
}
// 关闭流
is.close();
// 断开连接,最好写上,disconnect是在底层tcp socket链接空闲时才切断。如果正在被其他线程使用就不切断。
// 固定多线程的话,如果不disconnect,链接会增多,直到收发不出信息。写上disconnect后正常一些。
conn.disconnect();
// System.out.println("完整结束");
DEBUGGER.info( "调用app后台接口完整结束" );
} catch (Exception e) {
e.printStackTrace();
}
return sb;
}
}
|
springboot中使用(接口一)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
@RequestMapping (value = "/get_all_user" , method = RequestMethod.POST)
@ResponseBody
public String get_all_user(HttpServletRequest request, HttpServletResponse response, Model model,
AdminTbl admintabl,User user) {
JSONObject result = new JSONObject();
String[] args = { "admin_id" };
// 判断传来的数据是否为空
JSONObject nullcheck = ParamterNullCheck.getInstance().checkNull(admintabl, args);
JSONObject param = null ;
param = (JSONObject) JSON.toJSON(user);
DEBUGGER.info(param.toJSONString());
if (nullcheck == null ) {
// 查询该 用户是否有该权限
admintabl.setUrl( "/userInfo/get_all_user" );
RolePermissionTbl rpt = permissionService.get_permission(admintabl);
if (rpt != null ) {
//调取接口
StringBuffer userlist= ToInterface.interfaceUtil( "http://192.168.10.176:20000/user/getUserList" ,param.toJSONString(), "POST" );
result.put( "userlist" , userlist);
} else {
result.put( "msg" , Constants.NO_AUTH);
}
}
else {
result = nullcheck;
}
return result.toJSONString();
}
|
接口二
1
2
3
4
5
6
7
8
9
10
|
@RequestMapping (value = "/getUserList" , method = RequestMethod.POST)
public ResponseEntity<Response> getUserList( @RequestBody UserPageDto data) {
JSONObject result = new JSONObject();
// 分页语句
Page<Object> page = PageHelper.startPage(data.getPageNo(), 2 );
List<User> list = userService.getUserList(data);
result.put( "userlist" , list); // 总记录数
result.put( "pagetotal" , page.getTotal());
return success(result);
}
|
接口的调用与调用别人的接口
此接口调用与被调用,都是在springMVC框架下使用参数以json格式传输。
别人调用我们的接口,与controller方法开发类似
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
@RequestMapping ( "/otherUseMe.do" )
public void otherUseMe (HttpServletRequest request,HttpServletResponse response) throw IOException{
//基本设置
response.setContent( "appliction/json;charset=utf-8" );
//用来给对方传递参数
PrintWriter out = response.getWriter();
//系统错误,返回结果
Map<String,Object> exceptionMap = new HashMap<String,Object>();
exceptionMap.put( "code" , "999" );
//将错误代码转为json字符串
String exceptionStr = JSONObject.fromObject(excetionMap).toString();
//接收传来的参数
String name = request.getParameter( "name" );
String gender = request.getParameter( "gender" );
try {
boolean flag = "业务处理" ;
if (失败flag){
Map<String,Object> falseMap = new HashMap<String,Object>();
falseMap.put( "code" , "998" );
falseMap.put( "result" , "fail" );
falseMap.put( "description" , "cry" );
String falseStr = JSONObject(falseMap).toString();
out.write(falseStr);
} else {
Map<String,Object> succMap = new HashMap<String,Object>();
falseMap.put( "code" , "997" );
falseMap.put( "result" , "succ" );
falseMap.put( "description" , "smile" );
String succStr = JSONObject(falseMap).toString();
out.write(succStr);
}
} catch (Exception e){
e.printStackTrace();
out.write(exceptionStr);
return ;
} finally {
if (out!= null ){
out.close();
}
}
|
我们调用别人的接口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
public boolean IUseOthers(String name,String gender){
HttpClient client = new HttpClient();
PostMethod postMethod = new PostMethod( "http://111..111.11.11:8080/---" );//写网址
postMethod.setRequestHeader( "Content-type" , "application/x-www-form-urlencoded;charset=utf-8" );
try {
postMethod.addParameter( "name" ,name);
postMethod.addParameter( "gender" ,gender);
int status = client.executeMethod(postMethod);
//获取返回信息
JSONObject jsonObject = JSONObject.fromObject(postMethod.getResponBodyAsString().toString);
String code = jsonObject.getString( "code" );
boolean flag = false ;
if ( "999" .equals(code)){
flag = true ;
}
} catch (HttpException e){
e.printStackTrace();
} catch (IOException e){
e.printStackTrace();
} finally {
if (postMehod!= null ){
postMehod.releaseConnection();
}
}
return flag;
}
}
|
以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/qq_33931552/article/details/80907462