• 内部系统间调用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哈哈哈~

  • 相关阅读:
    SQL SERVER2017 安装程序无法与下载服务器联系。无法安装机器学习服务的问题解决方式
    Kali Linux无法访问网络的问题
    Vue的冒泡事件
    记录阿里云ECS(Centos7.4)安装mysql 8.0.X服务
    沧桑巨变中焕发青春活力-记极1s HC5661A 打怪升级之路
    Asp.Net MVC过滤器小试牛刀
    C# Windows Service调用IBM Lotus Notes发送邮件
    记录一些js框架用途
    vc14(vs2015) 编译php7 记录
    C++ API方式连接mysql数据库实现增删改查
  • 原文地址:https://www.cnblogs.com/aheizi/p/5307062.html
Copyright © 2020-2023  润新知