java项目远程调用别的项目接口
本文是在java项目中远程调用别的项目的接口实现方法演示;通过Apache封装好的CloseableHttpClient。
·
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;
}
}
仰天大笑出门去,我辈岂是蓬蒿人
更多推荐
所有评论(0)