RestTemplate如何添加请求头headers和请求体body

 更新时间:2023年07月07日 09:16:57   作者:pNull  
这篇文章主要介绍了RestTemplate如何添加请求头headers和请求体body问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

RestTemplate添加请求头headers和请求体body

//headers & cookie
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.add("basecret", config.getBasecret());
headers.add("baid", config.getBaid());
List<String> cookies = new ArrayList<>();
cookies.add("COOKIE_USER" + Strings.nullToEmpty(config.getCookie()));
headers.put(HttpHeaders.COOKIE, cookies);

1、调用postForObject方法  

2、使用postForEntity方法  

3、调用exchange方法

postForObject和postForEntity方法的区别主要在于可以在postForEntity方法中设置header的属性,当需要指定header的属性值的时候,使用postForEntity方法。

exchange方法和postForEntity类似,但是更灵活,exchange还可以调用get请求。

使用这三种方法传递参数,Map不能定义为以下两种类型

Map<String, Object> paramMap = new HashMap<String, Object>();
Map<String, Object> paramMap = new LinkedHashMap<String, Object>();

把Map类型换成LinkedMultiValueMap后,参数成功传递到后台

MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();
MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();
paramMap.add("dt", "20190225");
// 1、使用postForObject请求接口
String result = template.postForObject(url, paramMap, String.class);
// 2、使用postForEntity请求接口
HttpHeaders headers = new HttpHeaders();
HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<MultiValueMap<String, Object>>(paramMap,headers);
ResponseEntity<String> response2 = template.postForEntity(url, httpEntity, String.class);
// 3、使用exchange请求接口
ResponseEntity<String> response3 = template.exchange(url, HttpMethod.POST, httpEntity, String.class);
 

4、get方法

如果是get请求,又想要把参数封装到map里面进行传递的话,Map需要使用HashMap,且url需要使用占位符,如下:

RestTemplate restTemplate2 = new RestTemplate();
String url = "http://127.0.0.1:8081/interact/getData?dt={dt}&ht={ht}";
// 封装参数,这里是HashMap
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("dt", "20190225");
paramMap.put("ht", "10");
//1、使用getForObject请求接口
String result1 = template.getForObject(url, String.class, paramMap);
System.out.println("result1====================" + result1);
//2、使用exchange请求接口
HttpHeaders headers = new HttpHeaders();
headers.set("id", "lidy");
HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<MultiValueMap<String, Object>>(null,headers);
ResponseEntity<String> response2 = template.exchange(url, HttpMethod.GET, httpEntity, String.class,paramMap);

5、如果post请求体是个Json的表单

        //JSONObject userInfo = new JSONObject();
        Map<String, Object> userInfo = Maps.newHashMap();
        userInfo.put("phone", accountForm.getPhone());
        userInfo.put("job", accountForm.getJob());
        userInfo.put("email", accountForm.getEmail());
        Map<String, Object> postBody = Maps.newHashMap();
        postBody.put("userInfo", userInfo);
        HttpEntity<Map> requestEntity = new HttpEntity<>(postBody, headers);
         try {
             ResponseEntity<String> result = restTemplate.postForEntity(config.getCreateWithAuthUrl(), requestEntity, String.class);
             JsonNode jsonNode = JsonUtils.toJsonNode(result.getBody());
             if (jsonNode.get("errno").asInt() == 200 || jsonNode.get("errno").asInt() == 505) {
                 return true;
             }
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        }

请求异常RestTemplate 获取response的headers和body

        ResponseEntity<String> responseEntity = null;
        try {
            restTemplate.postForEntity("http://localhost:1111/test", null, String.class);
        } catch (HttpStatusCodeException e) {
            e.getStatusCode();
            e.getResponseBodyAsString();
            e.getResponseHeaders();
        }

捕捉HttpStatusCodeException替代RestClientException

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • springboot项目中controller层与前端的参数传递方式

    springboot项目中controller层与前端的参数传递方式

    这篇文章主要介绍了springboot项目中controller层与前端的参数传递方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • Java毕业设计实战项目之仓库管理系统的实现流程

    Java毕业设计实战项目之仓库管理系统的实现流程

    这是一个使用了java+SSM+Maven+Bootstrap+mysql开发的仓库管理系统,是一个毕业设计的实战练习,具有一个仓库管理系统该有的所有功能,感兴趣的朋友快来看看吧
    2022-01-01
  • Java Spring @Lazy延迟注入源码案例详解

    Java Spring @Lazy延迟注入源码案例详解

    这篇文章主要介绍了Java Spring @Lazy延迟注入源码案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • Java中的延迟队列DelayQueue详细解析

    Java中的延迟队列DelayQueue详细解析

    这篇文章主要介绍了Java中的延迟队列DelayQueue详细解析,JDK自身支持延迟队列的数据结构,其实类:java.util.concurrent.DelayQueue,<BR>我们通过阅读源码的方式理解该延迟队列类的实现过程,需要的朋友可以参考下
    2023-12-12
  • java如何用反射将一个对象复制给另一个对象

    java如何用反射将一个对象复制给另一个对象

    这篇文章主要介绍了java如何用反射将一个对象复制给另一个对象问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Spring Boot整合log4j2日志配置的详细教程

    Spring Boot整合log4j2日志配置的详细教程

    这篇文章主要介绍了SpringBoot项目中整合Log4j2日志框架的步骤和配置,包括常用日志框架的比较、配置参数介绍、Log4j2配置详解以及使用步骤,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-02-02
  • 教你代码中获取当前 JAR 包的存放位置

    教你代码中获取当前 JAR 包的存放位置

    这篇文章主要介绍了如何获取当前JAR包的存放位置,要获取当前运行的 JAR 包所存放的位置,可以使用 ProtectionDomain 和 CodeSource 类,本文结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-08-08
  • 详解Java中“==”与equals()的区别

    详解Java中“==”与equals()的区别

    这篇文章主要介绍了详解Java中“==”与equals()的区别的相关资料,需要的朋友可以参考下
    2017-02-02
  • 使用springboot aop来实现读写分离和事物配置

    使用springboot aop来实现读写分离和事物配置

    这篇文章主要介绍了使用springboot aop来实现读写分离和事物配置,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Java中的共享锁CountDownLatch及源码解析

    Java中的共享锁CountDownLatch及源码解析

    这篇文章主要介绍了Java中的共享锁CountDownLatch及源码解析,CountDownLatch是一种同步辅助工具,允许一个或多个线程等待,直到在其它线程中执行的一组操作完成;CountDownLatch使用指定的计数初始化,需要的朋友可以参考下
    2023-11-11

最新评论