1、SpringBoot关于系统之间的远程互相调用

可以采用RestTemplate方式发起Rest Http调用,提供有get、post等方式。

1、1远程工具类

此处使用Post方式,参考下面封装的HttpClient类 1.1

/**
* Created by @kai on 2018/12/24/024.
* Time: 13:54
* Desc: 远程连接工具类
*/
@Service
public class HttpClient {

/**
* 根据远程地址发起访问-参数类型为form表单
* @param url 远程地址
* @param method 远程方法
* @param params 方法参数
* @return
*/
public Object client(String url,HttpMethod method,MultiValueMap<String,String> params){
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/x-www-form-urlencoded");
HttpEntity<MultiValueMap<String, String>> httpEntity = new HttpEntity<>(params, headers);
ResponseEntity<String> responseEntity = restTemplate.postForEntity(url,httpEntity,String.class);
String body = responseEntity.getBody();
JSONObject jsonObject = JSONObject.parseObject(body);
return jsonObject.get("data");
}

/**
* 根据远程地址发起访问-参数类型为JSON
* @param url 远程地址
* @param method 远程方法
* @param params 方法参数
* @return
*/
public Object clientJson(String url,HttpMethod method,Map<String,Object> params){
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
cn.hutool.json.JSONObject jsonObject = JSONUtil.parseFromMap(params);
HttpEntity<cn.hutool.json.JSONObject> httpEntity = new HttpEntity<>(jsonObject, headers);
ResponseEntity<String> responseEntity = restTemplate.postForEntity(url,httpEntity,String.class);
String body = responseEntity.getBody();
JSONObject jsonObjectResult = JSONObject.parseObject(body);
return jsonObjectResult.get("data");
}

}
[1.1​]  

1、2远程参数说明

工具类中提供了远程过程中传递参数的两种格式:

其中 headers.add("Content-Type", "application/x-www-form-urlencoded") 为form表单格式,支持键值对数据传输;

当参数类型为form表单时,数据需要封装成MultiValueMap<String,String>格式,前台使用controller接受时,可以直接使用 MultiValueMap 变量接收,参照代码如下 1.2

/**
* 保存分组策略对象
* @param
* @return
*/
@RequestMapping(value = "/saveDocGroupPolicy",method = RequestMethod.POST)
public ApiResult saveGroupPolicy(@RequestParam MultiValueMap<String,String> paramMap,@Valid GroupStrategyIO groupStrategyIO){
Integer userId = ShiroUtil.getExamUserId();
List<String> userList = new ArrayList<>();
userList.add(userId+"");
paramMap.put("userId",userList);
Object jsonObject = httpClient.client(ExamConfigConstants.url+"/exam/configPolicy/saveDocGroupPolicy", HttpMethod.POST, paramMap);
return ApiResult.success(jsonObject);
}
[1.2]  接受参数为form对象

headers.setContentType(MediaType.APPLICATION_JSON_UTF8) 为json数据格式

当参数为json格式时,远程服务器接受参数需加上注解@RequestBody,对于复杂参数可以使用对象接受,将对象转为Map,对数据进行加工,再将map转化为JSONObject,参照代码如下:1.3

/**
* 保存试卷策略
* @param paperStrategyIO 试卷策略对象
* @return
*/
@RequestMapping(value = "/savePaperConfig")
public ApiResult savePaperConfig(@RequestBody PaperStrategyIO paperStrategyIO){
Map<String, Object> paramMap = BeanUtil.beanToMap(paperStrategyIO);
Integer userId = ShiroUtil.getExamUserId();
paramMap.put("userId",userId);
Object jsonObject = httpClient.clientJson(ExamConfigConstants.url+"/exam/paper/savePaperConfigWithMap", HttpMethod.POST, paramMap);
return ApiResult.success(jsonObject);
}
[1.3​]  接收参数为复杂json串

2、后记

关于RestTemplate还有很多可调用的API,可以查看官方网站了解

http://spring.io/blog/2009/03/27/rest-in-spring-3-resttemplate

3、写在最后

如果,你感觉此篇博客有用,请评论一个1,若感觉鸡肋,可以评论一个0,我会继续努力完善!!!

SpringBoot关于系统之间的远程互相调用的更多相关文章

  1. SpringBoot里使用RMI进行远程方法调用

    一.Java RMI定义 Java RMI:Java远程方法调用,即Java RMI(Java Remote Method Invocation)是Java编程语言里,一种用于实现远程过程调用的应用程 ...

  2. (转载)spring 之间的远程调用-Spring Http调用的实现

    原文:https://www.cnblogs.com/lewisat/p/6132082.html 1:Spring Http设计思想 最近在研究公司自己的一套rpc远程调用框架,看到其内部实现的设计 ...

  3. XML-RPC远程方法调用

    一.简介 XML-RPC的全称是XML Remote Procedure Call,即XML远程方法调用. 它是一套允许运行在不同操作系统.不同环境的程序实现基于Internet过程调用的规范和一系列 ...

  4. 使用WinSCP在Windows和Linux系统之间传输文件

    小梅哥编写,未经许可,严禁用于任何商业用途 2018年6月30日 在日常SoC开发中,我们经常需要在Windows和Linux系统之间传输文件,例如在Windows系统上的DS-5集成开发环境中编写好 ...

  5. Ruby操作VBA的注意事项和技巧(2):宏里调用和控制窗体以及窗体上的控件、不同workbook之间的宏互相调用

    4.宏里调用并控制窗体以及窗体上的各种控件 1 Sub Criterion_Check() 2 If Workbooks.count = 0 Then '如果当前没有打开的工作薄的话需要发出警告 3 ...

  6. Java RMI远程方法调用

    RMI(远程接口调用) 1. RMI的原理: RMI系统结构,在客户端和服务器端都有几层结构. 方法调用从客户对象经占位程序(Stub).远程引用层(Remote Reference Layer)和传 ...

  7. SpringBoot工程+热部署进行远程调试

    本文转载自:https://blog.csdn.net/qq_31868349/article/details/78553901 SpringBoot工程+热部署进行远程调试 本地端添加配置 在pom ...

  8. Win & Mac 系统之间U盘传递的U盘文件格式选取问题

    Win & Mac 系统之间U盘传递的U盘文件格式选取问题 1. Win系统与Mac系统之间可以通过 exFat U盘文件系统传递 exFAT(Extended File Allocation ...

  9. dubbo_远程同步调用原理

    Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况. Dubbo缺省协议,使用基于mina1.1.7+hessian3. ...

随机推荐

  1. 关于Bagging

    Bagging分为两种:Bagging和Pasting,前者是概率中的放回随机采样,后者是不放回随机采样:默认是放回采样随机:设置bootstrap=False即设置为不放回采样:默认bootstra ...

  2. ElasticSearch(二) 关于DSL

    关于Lucene里面的查询评分,其实是基于一个公式:TF/ IDF(Term-Frequency/ Inverse Document Frequency),词频率/ 倒排文档频率,这个公式讲了一个故事 ...

  3. java-网页404(个例)

    tomcat正常启动网址404问题 个例情况: 1.选择第二个 2.web.xml配置不对(是因为缺少相应jar包和配置错误,根据控制器显示的错误一步步解决错误,最后OK) 3.构建路径中有错误(更换 ...

  4. mqtt-jmeter

    mqtt-jmeter https://github.com/emqtt/mqtt-jmeter mqtt-jmeter MQTT JMeter Plugin, it's used for testi ...

  5. ASP.NET AJAX入门系列(1):概述

    经常关注我的Blog的朋友可能注意到了,在我Blog的左边系列文章中,已经移除了对Atlas学习手记系列文章的推荐,因为随着ASP.NET AJAX 1.0 Beta版的发布,它们已经不再适用,为了不 ...

  6. Tensorflow安装环境更新

    本博文是对前面两篇tensorflow的博文的一个继续,对环境的更新. 基于tensorflow的MNIST手写识别 安装tensorflow,那叫一个坑啊 主要出发点: 上述两篇博文的程序运行的环境 ...

  7. Django中的URL映射

    1.为什么回去urls.py文件中寻找映射呢? 因为在settings.py中配置了ROOT_URLCONF为urls.py: ROOT_URLCONF = 'first_project.urls' ...

  8. 通过Word 2016 发布的内容

    从Word 2007 开始就支持的功能的,第一次使用. 在cnBlogs.com的个人设置中允许使用客户端发布:https://i.cnblogs.com/Configure.aspx Word中配置 ...

  9. Wsus 清理的计划任务

    <# Get-ExecutionPolicy 默认为 RemoteSigned 该签名设置 Set-ExecutionPolicy Unrestricted 添加到排除 powershell - ...

  10. 实现java随机数Random的几招

    一,在java.util这个包里面提供了一个Random的类,我们可以新建一个Random的对象来产生随机数,可以产生随机整数.随机float.随机double,随机long,这个也是我们经常用的一个 ...