以前一开始用原生的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请求的更多相关文章

  1. RestTemplate发送请求并携带header信息 RestTemplate post json格式带header信息

    原文地址:  http://www.cnblogs.com/hujunzheng/p/6018505.html RestTemplate发送请求并携带header信息   v1.使用restTempl ...

  2. RestTemplate发送请求并携带header信息

    1.使用restTemplate的postForObject方法 注:目前没有发现发送携带header信息的getForObject方法. HttpHeaders headers = new Http ...

  3. 【spring】RestTemplate发送请求,请求第三方接口 的几种请求方式POST,GET,DELETE,PUSH

    org.springframework.web.client.RestTemplate 参考地址:http://www.cnblogs.com/UniqueColor/p/7123347.html G ...

  4. Spring RestTemplate GET 请求参数

    @Test public void testUpdateProfitJson_GET_Params() throws BusinessException { String apiURL="U ...

  5. Spring MVC 4实现RESTFul WebServices的CRUD实例和使用RestTemplate进行请求(全注解形式配置Web和Filter)

    在这篇文章中,我们将使用Spring4 MVC编写一个CRUD RESTful Web服务,写一个REST客户端RestTemplate来使用这些服务.我们也将利用外部客户端测试的服务. 下面将展示核 ...

  6. 拦截RestTemplate的请求

    RestTemplate一般用于方法内部请求调用,请求报错时难以调试,所以可以为RestTemplate加拦截器进行调试,具体操作如下: 拦截器LoggingClientHttpRequestInte ...

  7. RestTemplate post请求使用map传参 Controller 接收不到值的解决方案 postForObject方法源码解析.md

    结论 post方法中如果使用map传参,需要使用MultiValueMap来传递 RestTemplate 的 postForObject 方法有四个参数 String url => 顾名思义 ...

  8. RestTemplate get请求多参数 简单封装

    使用RestTemplate发送get请求时,如果有多个参数拼接起来会比较麻烦,在此做个简单的封装 public static void main(String[] args) { Map<St ...

  9. RestTemplate post请求 Controller 接收不到值的解决方案 postForObject方法源码解析

    springboot 整合 RestTemplate 与 使用方法 RestTemplate 的 postForObject 方法有四个参数 String url => 顾名思义 这个参数是请求 ...

随机推荐

  1. net core cap结合redis+数据库实现最终一致性

    CAP 同时支持使用 RabbitMQ,Kafka,Azure Service Bus 等进行底层之间的消息发送. CAP 目前支持使用 Sql Server,MySql,PostgreSql,Mon ...

  2. NET 单点登录原理

    简介 单点登录是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统的保护资源,若用户在某个应用系统中进行注销登录,所有的应用系统都不能再直接访问保护资源,像一些知名的大型网站,如:淘 ...

  3. Python-对比参考目录查找多个文件夹中不同的文件

    改完文件名称后,Dr.he 发现分别保存5个状态的jpg 文件的文件夹出现缺少文件的情况.为了让他少熬夜查找缺失文件,结合网友分享的脚本,写了查找以下代码,满足他的需求,也以防自己忘记.以下代码能解决 ...

  4. Spring-Boot配置文件web性能(服务器)配置项(常用配置项为红色)

    参数 介绍 server.address 服务器应绑定到的网络地址 server.compression.enabled = false 如果启用响应压缩 server.compression.exc ...

  5. Amazing 2020

    Amazing 2020 Intro 2020 转眼即逝,2020 是比较艰辛的一年,因为疫情原因,很多人的工作以及生活都多多少少受到了一些影响. 引用网上盛传的一句话--2020 实"鼠& ...

  6. Cookie和登录注册

    1. 什么是Cookie? 服务器通过 Set-Cookie 头给客户端一串字符串 客户端每次访问相同域名的网页时,必须带上这段字符串 客户端要在一段时间内保存这个Cookie Cookie 默认在用 ...

  7. logback运行时动态创建日志文件

    package com.example.demo.config; import ch.qos.logback.classic.Level; import ch.qos.logback.classic. ...

  8. 使用postman添加cookie失败和cookie消失问题

    例如 groupId=2; path=/; domain=.www.baidu.com; HttpOnly; Expires=Tue, 16 Jul 2019 03:42:12 GMT; 添加失败和c ...

  9. case when then else end用法

        case具有两种格式,简单case函数和case搜索函数 case函数只返回第一个符合条件的值,剩下的case部分将会被自动忽略 1.简单函数 CASE sex         WHEN '1 ...

  10. Python 日志打印之logging.config.dictConfig使用总结

    日志打印之logging.config.dictConfig使用总结 By:授客 QQ:1033553122 #实践环境 WIN 10 Python 3.6.5 #函数说明 logging.confi ...