内部系统间调用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哈哈哈~
内部系统间调用client包的封装方法的更多相关文章
- Python调用jar包中的方法
[本文出自天外归云的博客园] 需求 最近在后台项目代码中一段自定义的AES加解密的程序在平时的测试工作中应用频繁.因为写脚本经常会需要使用,而经过各种尝试,比如jpype等,都不尽如人意.最后转换思路 ...
- C#调用java包里的方法
用IKVM,步骤: 下载ikvmbin-7.2.4630.5.zip,解压,把bin目录所在路径加到环境变量path里 2.电脑开始->CMD,输入ikvmc –out:”输出dll文件的路径” ...
- spring boot项目使用swagger-codegen生成服务间调用的jar包
swagger-codegen的github:https://github.com/swagger-api/swagger-codegen 需要的环境:jdk > 1.7 maven > ...
- 如何制作Jar包并在android中调用jar包
android制作jar包: 新建android工程,然后右击,点击导出,选择导出类型为Java下的JAR file,在java file specification 中不要选择androidmani ...
- jmeter 调用jar包 本地加密
1.因为加密接口是有我们自己加密方式,所有加密包由开发提供,获得加密包后方式jmeter目录/lib/ext文件夹中 2.选择引入加密包 3.添加BeanShell Sampler和Debug Sam ...
- WebService与RMI(远程调用方式实现系统间通信)
前言 本文是<分布式java应用基础与实践>读书笔记:另外参考了此博客,感觉讲的挺好的,尤其是其中如下内容: 另外,消息方式实现系统间通信本文不涉及.RMI则只采用spring RMI框架 ...
- 系统间通信(10)——RPC的基本概念
1.概述 经过了详细的信息格式.网络IO模型的讲解,并且通过JAVA RMI的讲解进行了预热.从这篇文章开始我们将进入这个系列博文的另一个重点知识体系的讲解:RPC.在后续的几篇文章中,我们首先讲解R ...
- 系统间通信——RPC架构设计
架构设计:系统间通信(10)——RPC的基本概念 1.概述经过了详细的信息格式.网络IO模型的讲解,并且通过JAVA RMI的讲解进行了预热.从这篇文章开始我们将进入这个系列博文的另一个重点知识体系的 ...
- 系统间通信(9)——通信管理与RMI 下篇
接上文<架构设计:系统间通信(8)--通信管理与RMI 上篇>.之前说过,JDK中的RMI框架在JDK1.1.JDK1.2.JDK1.5.JDK1.6+几个版本中做了较大的调整.以下我们讨 ...
随机推荐
- chkconfig 检查、设置系统的各种服务
chkconfig 检查.设置系统的各种服务 学习了:http://man.linuxde.net/chkconfig chkconfig --add 某某服务
- Mac OS X 10.10 执行 Eclipse 提示须要安装 Java
- 算法笔记_101:蓝桥杯练习 算法提高 身份证号码升级(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 从1999年10月1日开始,公民身份证号码由15位数字增至18位.(18位身份证号码简介).升级方法为: 1.把15位身份证号码中的年份由 ...
- Zoho CEO:云计算泡沫巨大 Salesforce仅仅是新的Siebel
最近Zoho CEO - Sridhar Vembu接受科技博客媒体Diginomica的专訪,从独特的眼光和见解.讲述了云计算行业环境.SaaS公司的生存状态.商业观念以及Zoho的商业模式. Sr ...
- 【Shiro】Apache Shiro架构之集成web
Shiro系列文章: [Shiro]Apache Shiro架构之身份认证(Authentication) [Shiro]Apache Shiro架构之权限认证(Authorization) [Shi ...
- mongodb - 查看数据库状态
> use test switched to db test > db.stats() { "db" : "test", #数据库名 "c ...
- XML - 十分钟了解XML结构以及DOM和SAX解析方式
引言 NOKIA 有句著名的广告语:"科技以人为本".不论什么技术都是为了满足人的生产生活须要而产生的.详细到小小的一个手机.里面蕴含的技术也是浩如烟海.是几千年来人类科技的结晶, ...
- 两种方法一句代码隐藏Activity的标题栏
把Activity的标题栏隐藏有两种方法.一种是在在Activity里面设置javacode.还有一种是在项目的清单文件AndroidManifest.xml中设置模版样式. 一.在Activity中 ...
- SpringCloud系列十七:Hystrix的监控
1. 回顾 上文讲解了使用Hystrix为Feign添加回退,并通过Fallback Factory检查回退原因以及如何为Feign客户端禁用Hystrix. 2. Hystrix的监控 除实现容错外 ...
- SQL 查询结果为 XML
--原始数据 SELECT OrderNO,CreateDate,Username,Address FROM Whir_Order_OrderInfo --1.AUTO模式 SELECT Or ...