zoukankan      html  css  js  c++  java
  • 内部系统间调用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哈哈哈~

  • 相关阅读:
    为什么世界上没有安全的工作?
    GIT学习----第六节:撤销修改
    vue-cli中koa输出console.log报错的解决方案
    简易版promise源码实现
    bind函数的模拟实现
    Es6语法实现的转盘抽奖效果——可配置转盘的抽奖概率
    探寻Object.assign内部的奥秘
    promise基本使用——简单的运动效果
    数组sort方法源码解析
    ES5数组一些常用的方法源码实现
  • 原文地址:https://www.cnblogs.com/aheizi/p/5307062.html
Copyright © 2011-2022 走看看