一个后端项目调用另一个后端项目的接口获取数据

前言

本文不会提供完整代码,主要是提供一种思路,但是配置类和工具类的代码是齐全的。

1.项目需求

一个后端项目B需要获取到另外一个后端项目A从数据库中获取的数据,并插入到相关目B的数据库中。

2.实现流程

1.在后端项目A中写一个接口,就叫它 queryDatas
这个接口的路径,我们这里就随便写一个 http://localhost:8848/test/queryDatas
注意:ThreeTablesData是我写的一个vo

    @PostMapping("/queryDatas")
    public ResultBean queryThreeTablesData() {
        ResultBean resultBean = new ResultBean();
        List<ThreeTablesData> list = statisticsOrderReadService.queryThreeTablesData();
        if (!list.isEmpty()) {
            resultBean.setData(list);
            resultBean.setCode(ErrorCode.CODE_SUCCESS);
            resultBean.setMessage("成功获取到数据");
        } else {
            resultBean.setCode(ErrorCode.CODE_UNKNOWN);
            resultBean.setMessage("当前数据为空");
        }
        return resultBean;
    }

2.在项目B中写一个配置类,就叫它 OneConfig

@Data
@Configuration
public class OneConfig {
    @Value("${projectA.url}")
    private String projectAUrl;
}

为了专业一点,去application-dev.yml中配置一下路径地址

projectA:
  url: "http://localhost:8848/test/queryDatas"

3.新建一个请求工具类,就叫它 HttpUtil

import com.alibaba.fastjson.JSONObject;
import jodd.http.HttpRequest;
import jodd.http.HttpResponse;

import java.nio.charset.StandardCharsets;
import java.util.Map;

public class HttpUtil {
	 /**
     * @param url 调用接口
     * @param map 查询条件
     * @return String 
    */
    public static String post(String url, Map<String, Object> map) {
//        String param = JSONObject.toJSONString(map);
        HttpResponse res = HttpRequest.post(url).connectionTimeout(90000).timeout(90000)
                .contentType("application/json", "UTF-8").bodyText(JSONObject.toJSONString(map))
                .send();
        res.charset("utf-8");
        return res.bodyText();
    }

    public static String post(String url, String jsonStr) {
        HttpResponse resp = HttpRequest.post(url).connectionTimeout(60000).timeout(60000)
                .contentType("application/json", StandardCharsets.UTF_8.toString()).body(jsonStr)
                .send();
        resp.charset(StandardCharsets.UTF_8.toString());
        return resp.bodyText();
    }

    /**
     * 发送Get请求
     *
     * @param url    : 请求的连接
     * @param params : 请求参数,无参时传null
     * @return
     */
    public static String get(String url, Map<String, String> params) {
        HttpRequest request = HttpRequest.get(url);
        if (params != null) {
            request.query(params);
        }
        HttpResponse response = request.send();
        return response.bodyText();
    }
}

4.好的,现在就可以去项目B的实现类中去获取项目A发过来的数据了

// 调用queryDatas接口,插入数据(json)
String tableDatas = HttpUtil.post(OneConfig.getHipayBaseUrl(),new HashMap<>());
// json转JSONObject
JSONObject jsonObject = JSONObject.parseObject(tableDatas);
// 获取code
String code = jsonObject.get("code").toString();
// 获取data
String data = jsonObject.get("data").toString();
// JSONObject转List
List<ThreeTablesData> parseArray = JSONObject.parseArray(data, ThreeTablesData.class);

好的,思路分享到此结束。

注意: 其从项目A传过去的是ResultBean数据类型,其他的类型,json转成List方法不一定相同。

3.补充说明

如果在发送请求的时候,出现如下报错:
WARN o.s.w.s.m.support.DefaultHandlerExceptionResolver - Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content type ‘text/html;charset=UTF-8’ not supported]

处理方法:在post的方法链中加入:

.bodyText(JSONObject.toJSONString(map),"application/json", "utf-8")
  • 2
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
要实现一个项目获取另一个项目的数据,可以使用HttpClient来实现。首先,在项目B中需要写一个配置类,例如OneConfig,用来配置项目A的URL。在这个配置类中,可以使用@Value注解来获取项目A的URL。\[2\] 然后,在项目B的实现类中,可以使用HttpClient发送HTTP请求来获取项目A发过来的数据。可以使用HttpClient的post方法,传入项目A的URL和需要的参数。然后将返回的数据转换成JSON格式,可以使用JSONObject来解析JSON数据。可以通过JSONObject的get方法来获取具体的数据字段。如果需要将JSON数据转换成对象列表,可以使用JSONObject的parseArray方法。\[3\] 这样,项目B就可以成功获取项目A的数据了。使用HttpClient可以方便地实现跨项目的远程调用接口。 #### 引用[.reference_title] - *1* [HttpClient远程调用一个项目接口查询数据](https://blog.csdn.net/weixin_44001965/article/details/102580697)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [一个后端项目调用一个后端项目接口获取数据](https://blog.csdn.net/m0_54355172/article/details/126028044)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

364.99°

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

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

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

打赏作者

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

抵扣说明:

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

余额充值