内部系统间调用client包的封装方法
目录
1.何为client
2.如何优雅的实现
3.json传输的具体实现
1.何为client
公司内部的系统调用,如果采用http直接调用,会非常不方便,而且不规范,接口升级或者变动,系统间的改动也是相当麻烦。所以在系统间采用client的互相调用,调用简单,如下:
获取用户信息:
UserRequserReq userReq = new UserReq();
//填充需要的字段
...
UserClient.getUserInfo(userReq);
是不是简单,规范很多。
2.如何优雅的实现
包结构
client
|-controller
| |_UserController.java
|-entity
| |-User.java
|-util
| |-HttpClientUtil.java
|-UserClient.java
controller:请求地址,接收请求的action。(不需要打包)
entity:主要是request和response的请求常量类
util:一些需要的工具类,HttpClientUtil、PropertyUtil等等
xxxClient:入口,实现调用的封装。
3.json传输的具体实现
controller的实现,就是一个简单的接口,保存用户信息:
@RequestMapping(value = "/addUser.in")
public @ResponseBody String addUser(String para)throws Exception{
UserRsp rsp=new UserRsp();
LogUtil.info("添加用户参数:"+para);
User User=JsonUtil.string2Object(para, User.class);
try {
boolean isSuccess =UserService.insertUser(User);
if (isSuccess) {
rsp.setReturnCode(UserConstants.RESPONSE_SUCCESS);
rsp.setReturnMessage("用户添加成功");
}
} catch (Exception e) {
LogUtil.error("添加用户接口异常"+e.getMessage());
rsp.setReturnCode(UserConstants.RESPONSE_FAIL);
rsp.setReturnMessage("添加用户接口异常");
e.printStackTrace();
}
}
client的实现:
public class ShopItemClient {
public static UserRsp addUser(User req){
UserRsp rsp=new UserRsp();
try {
String url=UserConstants.USER_ADDRESS.replace(" ", "") + "/userClient/addUser.in";
Map<String, String> para=new HashMap<String, String>();
para.put("para", JsonUtil.object2String(req));
String res = HttpClientUtil.requestAsHttpPOST(url,
para,
UserConstants.INPUT_CHARSET,
10000,20000);
rsp=JsonUtil.string2Object(res, UserRsp.class);
return rsp;
} catch (Exception e) {
LogUtil.error(e.getMessage());
rsp.setReturnCode(UserConstants.RESPONSE_FAIL);
rsp.setReturnMessage(e.getMessage());
}
return rsp;
}
}
Client就是对请求针对业务的再一次封装,将不同的业务规范化。
使用的时候,直接打包成相应业务的jar包,其他系统的就可以直接调用啦。
好像很简单的样子,O(∩_∩)O哈哈哈~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?