前言
本文不会提供完整代码,主要是提供一种思路,但是配置类和工具类的代码是齐全的。
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")