[TOC]
公司内部的系统调用,如果采用http直接调用,会非常不方便,而且不规范,接口升级或者变动,系统间的改动也是相当麻烦。所以在系统间采用client的互相调用,调用简单,如下:
获取用户信息:
UserRequserReq userReq = new UserReq();
//填充需要的字段
...
UserClient.getUserInfo(userReq);
是不是简单,规范很多。
包结构
client
|-controller
| |_UserController.java
|-entity
| |-User.java
|-util
| |-HttpClientUtil.java
|-UserClient.java
controller:请求地址,接收请求的action。(不需要打包)
entity:主要是request和response的请求常量类
util:一些需要的工具类,HttpClientUtil、PropertyUtil等等
xxxClient:入口,实现调用的封装。
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哈哈哈~