RestTemplate post请求
以前一开始用原生的http请求,那叫一个累,后来找到一个第三方的工具包,用起来是真的舒服,不过有一说一,第三方工具包依赖性真的强,除非和组长商量过,不然能少用,还是少用点。话说搞微服务的肯定少不了和HTTP或RPC打交道的,以前了解过Spring 的RestTemplate,但是一旦实践就给忘光光了。不过经过几次折腾,总算是搞明白了。get请求就不说了,主要是说一下post请求。上代码:
1 RestTemplate restTemplate = new RestTemplate();
2 HttpHeaders headers = new HttpHeaders();
3 MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
4 map.add("subFun", CommConfig.Otrs_SubFun_CTIDUTYPERSON);
5 map.add("paramEncoded", base(params));
6 //以form-data形式发送请求
7 headers.setContentType(MediaType.MULTIPART_FORM_DATA);
8 HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(map, headers);
9 ResponseEntity<String> response = restTemplate.postForEntity(url, request, String.class);
10 //对数据结果的处理
11 return JSONObject.parseObject(response.getBody());
第一行是new一个对象
第二行是new一个头部信息
第三行是new一个map对象,注意要用LinkedMultiValueMap
第四、五行都是添加请求参数
第七行是设置请求方式,这里要特别注意,因为post有很多的发送方式,比如,json,form-data,xxx-form-data等,具体的点进去找就行了,里面也有注释说得很清楚
第八行是组装请求体
第九行是发送请求,注意String.class,如果你返回的参数属性确定,就可以用一个实体类来接收
第十一行是我把接收到的参数转为了json格式
这样一个最实用的post请求就出来了。由于我的代码中多处用到了post请求,所以我就拆分成一个方法,为啥不是工具类,因为我觉得他还不够灵活。上截图:

1 /**
2 * 发送post请求
3 * @param map 请求参数
4 * @param url 请求地址
5 * @return 响应结果
6 */
7 public JSONObject post(MultiValueMap<String, Object> map, String url) {
8 RestTemplate restTemplate = new RestTemplate();
9 HttpHeaders headers = new HttpHeaders();
10 //以form-data形式发送请求
11 headers.setContentType(MediaType.MULTIPART_FORM_DATA);
12 HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(map, headers);
13 ResponseEntity<String> response = restTemplate.postForEntity(url, request, String.class);
14 //对数据结果的处理
15 return JSONObject.parseObject(response.getBody());
16 }
调用方式,组装好一个map,然后直接调用post()方法就好了

1 //1、RestTemplate发送http post请求
2 MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
3 map.add("subFun", CommConfig.Otrs_SubFun_CTISTATISTICSCALLRECORD);
4 map.add("paramEncoded", base(params));
5 //2、拿到返回的数据,转换为JSONObject
6 JSONObject results = post(map, resUrl("base","otrsUrlBase")+resUrl("base","otrsUrlInf"));
之所以说不够灵活,就是请求方式目前是固定的,没有分解出来。最近项目比较赶,没多少时间研究了,先这样子吧。
好了,下课
RestTemplate post请求的更多相关文章
- RestTemplate发送请求并携带header信息 RestTemplate post json格式带header信息
原文地址: http://www.cnblogs.com/hujunzheng/p/6018505.html RestTemplate发送请求并携带header信息 v1.使用restTempl ...
- RestTemplate发送请求并携带header信息
1.使用restTemplate的postForObject方法 注:目前没有发现发送携带header信息的getForObject方法. HttpHeaders headers = new Http ...
- 【spring】RestTemplate发送请求,请求第三方接口 的几种请求方式POST,GET,DELETE,PUSH
org.springframework.web.client.RestTemplate 参考地址:http://www.cnblogs.com/UniqueColor/p/7123347.html G ...
- Spring RestTemplate GET 请求参数
@Test public void testUpdateProfitJson_GET_Params() throws BusinessException { String apiURL="U ...
- Spring MVC 4实现RESTFul WebServices的CRUD实例和使用RestTemplate进行请求(全注解形式配置Web和Filter)
在这篇文章中,我们将使用Spring4 MVC编写一个CRUD RESTful Web服务,写一个REST客户端RestTemplate来使用这些服务.我们也将利用外部客户端测试的服务. 下面将展示核 ...
- 拦截RestTemplate的请求
RestTemplate一般用于方法内部请求调用,请求报错时难以调试,所以可以为RestTemplate加拦截器进行调试,具体操作如下: 拦截器LoggingClientHttpRequestInte ...
- RestTemplate post请求使用map传参 Controller 接收不到值的解决方案 postForObject方法源码解析.md
结论 post方法中如果使用map传参,需要使用MultiValueMap来传递 RestTemplate 的 postForObject 方法有四个参数 String url => 顾名思义 ...
- RestTemplate get请求多参数 简单封装
使用RestTemplate发送get请求时,如果有多个参数拼接起来会比较麻烦,在此做个简单的封装 public static void main(String[] args) { Map<St ...
- RestTemplate post请求 Controller 接收不到值的解决方案 postForObject方法源码解析
springboot 整合 RestTemplate 与 使用方法 RestTemplate 的 postForObject 方法有四个参数 String url => 顾名思义 这个参数是请求 ...
随机推荐
- 【Tomcat】Tomcat服务器核心配置说明及标签
目录 一,主要标签结构 二,Server标签 标签属性: 子标签: 三,Service 标签 子标签: 四,Executor 标签 属性: 五,Connector标签 属性: 六,Engine标签 属 ...
- PhPMyadmin拿Shell
phpmyadmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具, --百度百科 1.入口寻找 目录扫描: 根据Linux对大小写敏感判断目标服 ...
- 线程 - Java中的Copy-On-Write容器
http://ifeve.com/java-copy-on-write/ 什么是CopyOnWrite容器 CopyOnWrite容器即写时复制的容器.通俗的理解是当我们往一个容器添加元素的时候,不直 ...
- IntelliJ IDEA如何用maven命令打jar包
IntelliJ IDEA如何用maven命令打jar包?下面给大家详细介绍一下具体步骤及说明. 工具/原料 IntelliJ IDEA maven 方法/步骤 第一步在CMD命令窗口输入 ...
- [leetcode]120.Triangle三角矩阵从顶到底的最小路径和
Given a triangle, find the minimum path sum from top to bottom.Each step you may move to adjacent nu ...
- Java对象赋值与引用
当需要创建多个相同类型的对象且有某些字段的值是相同的,如果直接 get,set 的话,属性多的时候代码会很长,于是乎,以下代码产生了( java 基础差没搞清楚赋值与引用) 复制代码 1 User u ...
- Hi,这里是我的2020年,请查收!
Part 1. 回顾 还记得新年第一天,我在刚租的房子给自己做了一顿咖喱饭 (不好意思放照片...),然后回顾并展望了一下自己的 2020. 转眼间,2020 就过去了. 总的来说,今年小目标 (比如 ...
- Docker技术
- java数组之binarySearch查找
/** * 1.如果找到目标对象则返回<code>[公式:-插入点-1]</code> * 插入点:第一个大与查找对象的元素在数组中的位置,如果数组中的所有元素都小于要查找的对 ...
- Linux top命令在生产环境的妙用
top linux下的任务管理器 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.top是一个动态显示过程,即可以通过用户按键来 ...