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

内部系统间调用client包的封装方法的更多相关文章

  1. Python调用jar包中的方法

    [本文出自天外归云的博客园] 需求 最近在后台项目代码中一段自定义的AES加解密的程序在平时的测试工作中应用频繁.因为写脚本经常会需要使用,而经过各种尝试,比如jpype等,都不尽如人意.最后转换思路 ...

  2. C#调用java包里的方法

    用IKVM,步骤: 下载ikvmbin-7.2.4630.5.zip,解压,把bin目录所在路径加到环境变量path里 2.电脑开始->CMD,输入ikvmc –out:”输出dll文件的路径” ...

  3. spring boot项目使用swagger-codegen生成服务间调用的jar包

    swagger-codegen的github:https://github.com/swagger-api/swagger-codegen 需要的环境:jdk > 1.7   maven > ...

  4. 如何制作Jar包并在android中调用jar包

    android制作jar包: 新建android工程,然后右击,点击导出,选择导出类型为Java下的JAR file,在java file specification 中不要选择androidmani ...

  5. jmeter 调用jar包 本地加密

    1.因为加密接口是有我们自己加密方式,所有加密包由开发提供,获得加密包后方式jmeter目录/lib/ext文件夹中 2.选择引入加密包 3.添加BeanShell Sampler和Debug Sam ...

  6. WebService与RMI(远程调用方式实现系统间通信)

    前言 本文是<分布式java应用基础与实践>读书笔记:另外参考了此博客,感觉讲的挺好的,尤其是其中如下内容: 另外,消息方式实现系统间通信本文不涉及.RMI则只采用spring RMI框架 ...

  7. 系统间通信(10)——RPC的基本概念

    1.概述 经过了详细的信息格式.网络IO模型的讲解,并且通过JAVA RMI的讲解进行了预热.从这篇文章开始我们将进入这个系列博文的另一个重点知识体系的讲解:RPC.在后续的几篇文章中,我们首先讲解R ...

  8. 系统间通信——RPC架构设计

    架构设计:系统间通信(10)——RPC的基本概念 1.概述经过了详细的信息格式.网络IO模型的讲解,并且通过JAVA RMI的讲解进行了预热.从这篇文章开始我们将进入这个系列博文的另一个重点知识体系的 ...

  9. 系统间通信(9)——通信管理与RMI 下篇

    接上文<架构设计:系统间通信(8)--通信管理与RMI 上篇>.之前说过,JDK中的RMI框架在JDK1.1.JDK1.2.JDK1.5.JDK1.6+几个版本中做了较大的调整.以下我们讨 ...

随机推荐

  1. MFC【17-3】线程和线程同步化

    17.3小知识点 17.3.1消息泵 编写一个应用程序,让它响应某菜单命令,画几千个椭圆. void CMFC线程View::OnStartDrawing(void) { m_bQuit=FALSE; ...

  2. hdu 4893Wow! Such Sequence!

    多校第三场 7题..线段树A的 #include <cstdio> #include <cstring> #include <iostream> #include ...

  3. Spring框架学习(6)使用ioc注解方式配置bean

    内容源自:使用ioc注解方式配置bean context层 : 上下文环境/容器环境 applicationContext.xml 1 ioc注解功能 注解 简化xml文件配置 如 hibernate ...

  4. 标准C++ I/O库 迭代器让数据自由流动 V8

    IO库的组成 三种流 C++的IO库以流对象为实体.主要有三种流: (1)标准输入输出流 (2)文件输入输出流 (3)字符串输入输出流 流迭代器 输入输出流迭代器 instream_iterator& ...

  5. FireFox插件SQLite Manager的使用

    最近几天开始高IOS数据库来着,一开始就CoreData的学习,结果高了一天没有一点进展. 没法,还是先老实代码着吧,不过用的火狐插件可视化数据库的操作也是不错的似乎. FireFox 插件:SQLi ...

  6. Win7如何更改网络位置,如何加入或创建家庭组

    1 打开网络和共享中心,点击连接上网的哪一个网络,点击把公用网络改为家庭网络   2 依次执行下一步     3 如果是加入一个家庭组,则输入家庭组的密码,否则将得到一个家庭组的密码   4 加入成功 ...

  7. Linux命令计算文件中某一列的平均值

    例如每秒执行一次top命令,把结果输出到某个文件中保存,现在需要统计这段时间内某个进程的平均CPU占用率,可使用以下命令 | grep "GameServer_r" | awk ' ...

  8. spring-boot 集成 swagger 问题的解决

    spring-boot 集成 swagger 网上有许多关于 spring boot 集成 swagger 的教程.按照教程去做,发现无法打开接口界面. 项目由 spring mvc 迁移过来,是一个 ...

  9. 《The Story of My Life》Introductiom - A Journey Of Discovery

    "I do not object to harsh criticism," said Helen Keller, "so long as I am treated lik ...

  10. Unity 逻辑层通知UI 通过接口消除他们通信的switch判断

    需求如何:  用户名字长度为2-12之间,  如果错误在界面上弹出一个消息框 写烂一点 public void PostRename(string name) { if (string.IsNullO ...