内部系统间调用client包的封装方法

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哈哈哈~

posted @ 2016-03-22 16:19  aheizi  阅读(918)  评论(0编辑  收藏  举报