java项目远程调用别的项目接口


前言

大概内容:

本文是在java项目中远程调用别的项目的接口实现方法演示;通过Apache封装好的CloseableHttpClient。


一、引入依赖

以下是本篇文章正文内容,下面案例可供参考


<!--CloseableHttpClient-->
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.2</version>
</dependency>
  
<!--fastjson-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.32</version>
</dependency>

二、编写调用工具类

import com.alibaba.fastjson.JSONObject;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;

import java.io.IOException;

/**
 * 注释: 远程调用工具类
 *
 * @author yangyongzhuo 2022/11/23 10:39
 */
public class ConnectUtil {

    /**
     * 注释: 以get方式调用第三方接口
     *
     * @param url	地址
     * @return java.lang.String
     * @author yangyongzhuo 2022/11/23 10:39
     */
    public static String connectGet(String url) {
        //创建HttpClient对象
        CloseableHttpClient httpClient = HttpClientBuilder.create().build();
        HttpGet httpGet = new HttpGet(url);

        //token自定义header头,用于token验证使用
        httpGet.addHeader("token", "");
        httpGet.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36");
        try {
            HttpResponse response = httpClient.execute(httpGet);
            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                //返回json格式
                return EntityUtils.toString(response.getEntity(),"UTF-8");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 注释: 以post方式调用第三方接口
     *
     * @param url	地址
     * @param json 入参
     * @return java.lang.String
     * @author yangyongzhuo 2022/11/23 10:39
     */
    public static String connectPost(String url, JSONObject json) {
        //创建HttpClient对象
        CloseableHttpClient httpClient = HttpClientBuilder.create().build();
        HttpPost httpPost = new HttpPost(url);
        //token自定义header头,用于token验证使用
        httpPost.addHeader("token", "");
        httpPost.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36");
        try {
            StringEntity se = new StringEntity(json.toString());
            se.setContentEncoding("UTF-8");
            //发送json数据需要设置contentType
            se.setContentType("application/json");
            //设置请求参数
            httpPost.setEntity(se);
            HttpResponse response = httpClient.execute(httpPost);
            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                //返回json格式
                String res = EntityUtils.toString(response.getEntity(),"UTF-8");
                return res;
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (httpClient != null) {
                try {
                    httpClient.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return null;
    }
}

三、测试——Post方式

远程调用别的项目方:

    /**
     * 注释: 每十秒执行一次,发送远程请求打印接收的参数
     * @return void
     *
     * @author yangyongzhuo 2022/11/21 15:52
     */
    @Scheduled(cron = "0/30 * * * * ?")
    public void getShieldDate() {
    	String shieldDataUrl="http://172.16.9.36:9002/test/TestData/send"
    	//假设这是入参
        HashMap<String, Object> paramMap = new HashMap<>();
        paramMap.put("testParam1","1");
        paramMap.put("testParam2","2");
        
        //转为Json格式
        JSONObject jsonObject = JSONObject.parseObject(JSON.toJSONString(paramMap));
        //调用工具类
        String jsonStr = ConnectUtil.connectPost(shieldDataUrl,jsonObject);
        //接收返回数据
        Map map= JSON.parseObject(jsonStr);
        log.info("发送时间->{}", map.get("executeTime"));
        //把发送的json格式字符串转为对象形式
        User entity = JSON.parseObject(map.get("data").toString(), User.class);
        System.err.println(entity);
    }

被调用方:以下是要远程访问的第三方接口

import cn.hutool.core.date.DateUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.web.bind.annotation.*;

import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.Map;

/**
 * 注释: 数据发送控制器
 *
 * @author yangyongzhuo 2022/11/21 14:32
 */
@Slf4j
@RestController
@RequestMapping("/TestData")
public class TestController {

    /**
     * 注释: 项目获取数据的数据源
     * @return java.util.Map<java.lang.String,java.lang.Object>
     *
     * @author yangyongzhuo 2022/11/21 14:33
     */
    @PostMapping("/send")
    public Map<String, Object> importData(@RequestBody Map<String,Object> paramMap) {
    	//打印接收到的参数
        System.err.println(objectMap);
        //模拟返回的map
        Map<String, Object> resultMap = new HashMap<>();
        resultMap.put("executeTime",new Date());
        resultMap.put("data",new User());
        return map;
    }

}

四、测试——Get方式

远程调用别的项目方:

    /**
     * 注释: 发送远程请求打印接收的参数
     * @return void
     *
     * @author yangyongzhuo 2022/11/21 15:52
     */
    @Scheduled(cron = CRON_10SEC)
    public void getShieldDate() {
    	String shieldDataUrl="http://172.16.9.36:9002/test/TestData/send"
    	//假设这是入参
        String str="/123/456"
        //调用工具类
        String jsonStr = ConnectUtil.connectGet(shieldDataUrl+str);
        //接收返回数据
        Map map= JSON.parseObject(jsonStr);
        log.info("数据发送时间->{}", map.get("executeTime"));
        //把发送的json格式字符串转为对象形式
        User entity = JSON.parseObject(map.get("data").toString(), User.class);
        System.err.println(entity);
    }

被调用方:以下是要远程访问的第三方接口

import cn.hutool.core.date.DateUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.web.bind.annotation.*;

import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.Map;

/**
 * 注释: 数据发送控制器
 *
 * @author yangyongzhuo 2022/11/21 14:32
 */
@Slf4j
@RestController
@RequestMapping("/TestData")
public class TestController {

    /**
     * 注释: 项目获取数据的数据源
     * @return java.util.Map<java.lang.String,java.lang.Object>
     *
     * @author yangyongzhuo 2022/11/21 14:33
     */
    @GetMapping("/send/{id}/{name}")
    public Map<String, Object> importData(@PathVariable String id,@PathVariable String name) {
    	//打印接收到的参数
        System.err.println(id,name);
        //模拟返回的map
        Map<String, Object> resultMap = new HashMap<>();
        resultMap.put("executeTime",new Date());
        resultMap.put("data",new User());
        return map;
    }

}

仰天大笑出门去,我辈岂是蓬蒿人

  • 7
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT行业小趴菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值