java实现一个接口调取另一个接口(接口一调取接口二)

目录
  • java一个接口调取另一个接口
    • 工具类
    • springboot中使用(接口一)
    • 接口二
  • 接口的调用与调用别人的接口
    • 别人调用我们的接口,与controller方法开发类似
    • 我们调用别人的接口

java一个接口调取另一个接口

工具类

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中使用(接口一)

@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();
    }

接口二

@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方法开发类似

@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();
  }
 }

我们调用别人的接口

 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;
 }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Java接口异步调用

    前言 java接口调用从调用方式上可以分为3类:同步调用,异步调用,回调:同步调用基本不用说了,它是一种阻塞式的调用,就是A方法中直接调用方法B,从上往下依次执行.今天来说说异步调用. 什么是异步调用? 我的理解就是在方法A中调用方法B,但是方法B很耗时,如果是同步调用的话会等方法B执行完成后才往下执行,如果异步的话就是我调用了方法B,它给我个返回值证明它已接受调用,但是它并没有完成任务,而我就继续往下执行.可能有表达不当的地方,欢迎指正. 再用一个生活中的例子吧: 异步调用就是你 喊 你朋友吃

  • Java调用WebService接口作测试

    1.选择一个WebService接口作测试 假设 WebService url 为 http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx(查询手机归属地) 通过网页看到接口有两个,也可看到参数以及返回值 该接口来源于 http://www.webxml.com.cn/zh_cn/web_services.aspx (WebService接口大全) 选择该手机号查询归属地,是由于简单,其他接口都复杂一点,老是出现解析组件 's:schema'

  • Java调用第三方接口示范的实现

    在项目开发中经常会遇到调用第三方接口的情况,比如说调用第三方的天气预报接口. 使用流程 [1]准备工作:在项目的工具包下导入HttpClientUtil这个工具类,或者也可以使用Spring框架的restTemplate来调用,上面有调用接口的方法[分为Get和Post方式的有参和无参调用]: package com.njsc.credit.util; import java.io.IOException; import java.net.URI; import java.util.ArrayL

  • Java利用httpclient通过get、post方式调用https接口的方法

    通过httpclient的get post方式调用http很常见.一般都是 HttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost(http://127.0.0.1/login); 但是如果要调用https这个方式就不行了.就要修改DefaultHttpClient <dependency> <groupId>org.apache.httpcomponents</groupId>

  • Java的接口调用时的权限验证功能的实现

    提示:这里可以添加本文要记录的大概内容: 例如:一般系统前端调用后台相关功能接口时,需要验证此时用户的权限是否满足调用该接口的条件,因此我们需要配置相应的验证权限的功能. 提示:以下是本篇文章正文内容,下面案例可供参考 一.编写的环境 工具:IDEA 框架:GUNS框架(自带后台权限验证配置,我们这里需要编写前端权限验证配置) 二.使用步骤 1.配置前端调用的接口 代码如下(示例): 在WebSecurityConfig中: // 登录接口放开过滤 .antMatchers("/login&qu

  • java调用Restful接口的三种方法

    目录 1,基本介绍 2,HttpURLConnection实现 3.HttpClient实现 4.Spring的RestTemplate 1,基本介绍 Restful接口的调用,前端一般使用ajax调用,后端可以使用的方法比较多, 本次介绍三种: 1.HttpURLConnection实现 2.HttpClient实现 3.Spring的RestTemplate 2,HttpURLConnection实现 @Controller public class RestfulAction { @Aut

  • java实现一个接口调取另一个接口(接口一调取接口二)

    目录 java一个接口调取另一个接口 工具类 springboot中使用(接口一) 接口二 接口的调用与调用别人的接口 别人调用我们的接口,与controller方法开发类似 我们调用别人的接口 java一个接口调取另一个接口 工具类 package com.utils; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Print

  • 设计引导--一个鸭子游戏引发的设计理念(多态,继承,抽象,接口,策略者模式)

    这篇博文是从实际生活中,提炼出来的设计理念,它现在是骨架,现在我加以代码实例,完成程序的血肉,以求让大家活生生的体会设计中的精髓. 自从我们学习面向对象编程以来,它方便了我们的思维思考模式,一个事物具备什么,就以对应的属性及方法加之. (▽) 没有什么难的,但是你学到的是最基础的语法和连自己都不是很了解的语言,用一段C语言程序,你可以很轻松的把它改成C#,JAVA等,这有什么难的?大多数程序员们扭曲了C#语言,把C的语法都移植到C#上(在我不了解C#的时候,我自己都这么做过),错了不可怕,可怕的

  • java两个线程同时写一个文件

    本文实例为大家分享了java两个线程同时写一个文件的具体代码,供大家参考,具体内容如下 1.多线程    线程是程序执行流的最小单元.是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源.一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行.由于线程之间的相互制约,致使线程在运行中呈现出间断性.线程也有就绪.阻塞和运行三种基本状态.就绪状态是指线程具备运行的所有条

  • Java接口操作(继承父类并实现多个接口)

    /* 使用接口的时候,需要注意: 1. 接口是没有静态代码块或者构造方法的. 2. 一个类的直接父类是唯一的,但是一个类可以同时实现多个接口. 格式: public class MyInterfaceImpl implements MyInterfaceA, MyInterfaceB { // 覆盖重写所有抽象方法 } 3. 如果实现类所实现的多个接口当中,存在重复的抽象方法,那么只需要覆盖重写一次即可. A接口 package cn.itcast.day10.demo02; public in

  • Java练手小项目实现一个项目管理系统

    目录 前言: 一.项目需求 二.功能实现 三.具体模块的实现 四.总结 前言: 时隔多日,我们学习完java的面向对象阶段,毕竟需要付诸实践,这个小项目就 作为我们第一个java面向对象解决的项目,接下来就让我们一起进入项目的世界吧 一.项目需求 • 模拟实现一个基于文本界面的 < 项目开发团队分配管理软件 > • 熟悉 Java 面向对象的高级特性,进一步掌握编程技巧和调试技巧 •主要涉及以下知识点: Ø 类的继承性和多态性 Ø 对象的值传递.接口 Ø static 和 final 修饰符

  • java删除数组中的某一个元素的方法

    实例如下: package org.company.project.test; import java.util.Arrays; import java.util.Scanner; public class ArraysDelete { public static void main(String[] args) { //删除数组中的某一个元素的方法: //把最后一个元素替代指定的元素,然后数组缩容 Scanner sc =new Scanner(System.in); int[] arr =

  • java拼接字符串时去掉最后一个多余逗号的方法

    本文实例讲述了java拼接字符串时去掉最后一个多余逗号的方法.分享给大家供大家参考.具体分析如下: 先看下面这段代码: for (int t = 0; t < memberLen; t++) { memTemp = stafferMap.get(strMember[t]); if(memTemp != null){ memberNames += memTemp + ","; } } 以上的代码,拼接的字符串会多一个",",比如:"str1,str2,

  • Linux下Java开发环境搭建以及第一个HelloWorld

    想在Linux进行JAVA开发吗?环境如何搭建,第一个HelloWorld如何实现,下面马上奉献: 1环境搭建     1.1 Java JDK 的安装     Java JDK 是java编译和运行的必要环境,所以首先必须安装这一软件包,方法如下:     1)下载JDK压缩包,注意看好版本是x86还是x64,windows的还是           linux,要搞清楚,我下的是jdk-7u13-linux-i586.tar.gz:     2)解压压缩包,并将解压后的目录放到/usr/li

  • java创建一个类实现读取一个文件中的每一行显示出来

    实例如下 import java.io.*; import java.util.*; class MyBufferReaderDemo{ private FileReader fb; MyBufferReaderDemo(FileReader fb){ this.fb=fb; } public String BufferReader() throws IOException{ StringBuilder s1=new StringBuilder(); int ch=0; while((ch=fb

  • Java Web 实现QQ登录功能一个帐号同一时间只能一个人登录

    对于一个帐号在同一时间只能一个人登录,可以通过下面的方法实现: 1 .在用户登录时,把用户添加到一个ArrayList中 2 .再次登录时查看ArrayList中有没有该用户,如果ArrayList中已经存在该用户,则阻止其登录 3 .当用户退出时,需要从该ArrayList中删除该用户,这又分为三种情况 ① 使用注销按钮正常退出 ② 点击浏览器关闭按钮或者用Alt+F4退出,可以用JavaScript捕捉该页面关闭事件, 执行一段Java方法删除ArrayList中的用户 ③ 非正常退出,比如

随机推荐