RestTemplate使用之如何设置请求头、请求体

 更新时间:2023年07月06日 10:46:19   作者:Hello_xzy_Word  
这篇文章主要介绍了RestTemplate使用之如何设置请求头、请求体问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

RestTemplate使用:设置请求头、请求体

HttpEntity ⭐

使用 RestTemplate 时可以通过 HttpEntity 设置请求头和请求体。HttpEntity 有4个构造方法:

  • 既不设置请求体,也不设置请求头
  • 只设置请求体
  • 只设置请求头
  • 同时设置请求体和请求头

HttpEntity 源码:

/**
 * Create a new, empty {@code HttpEntity}.
 */
protected HttpEntity() {
  this(null, null);
}
/**
 * Create a new {@code HttpEntity} with the given body and no headers.
 * @param body the entity body
 */
public HttpEntity(T body) { // 只设置请求体
  this(body, null);
}
/**
 * Create a new {@code HttpEntity} with the given headers and no body.
 * @param headers the entity headers
 */
public HttpEntity(MultiValueMap<String, String> headers) { // 只设置请求头
  this(null, headers);
}
/**
 * Create a new {@code HttpEntity} with the given body and headers.
 * @param body the entity body
 * @param headers the entity headers
 */
public HttpEntity(T body, MultiValueMap<String, String> headers) { // 同时设置请求体与请求头
  this.body = body;
  HttpHeaders tempHeaders = new HttpHeaders();
  if (headers != null) {
      tempHeaders.putAll(headers);
  }
  this.headers = HttpHeaders.readOnlyHttpHeaders(tempHeaders);
}

1、为 post、put 请求设置请求头、请求体

如果是为 post、put 请求设置请求头、请求体,可以在调用方法时,利用第二个参数传入 HttpEntity 对象,例如:

HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.set("MyRequestHeader", "MyValue");
HttpEntity requestEntity = new HttpEntity(requestHeaders);
Book book = restTemplate.postForObject("http://127.0.0.1:8080/getbook", requestEntity, Book.class);

PS:public class HttpHeaders implements MultiValueMap<String, String>, Serializable

同时设置请求头和请求体:

    @PostMapping("post_with_body_and_header")
    public void postWithBodyAndHeader(@RequestBody(required = false) UserEntity requestBody) {
        // 1.请求头
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.add("headerName1", "headerValue1");
        httpHeaders.add("headerName2", "headerValue2");
        httpHeaders.add("headerName3", "headerValue3");
        httpHeaders.add("Content-Type", "application/json"); // 传递请求体时必须设置
        // 2.请求头 & 请求体
        HttpEntity<String> fromEntity = new HttpEntity<>(JSONUtil.toJsonStr(requestBody), httpHeaders);
        MessageBox responseBody = restTemplate.postForObject(INVOKE_URL + "/test/receive", fromEntity, MessageBox.class);
        log.info("响应体:{}", JSONUtil.toJsonPrettyStr(responseBody));
    }

2、为其他请求设置请求头、请求体

如果是其它HTTP方法调用要设置请求头,可以使用exchange()方法:

HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.set("MyRequestHeader", "MyValue");
HttpEntity requestEntity = new HttpEntity(requestHeaders);
HttpEntity<String> response = template.exchange(
        "http://example.com/hotels/{hotel}",
        HttpMethod.GET, 
        requestEntity, 
        String.class, 
        "42"
    );
String responseHeader = response.getHeaders().getFirst("MyResponseHeader");
String body = response.getBody();

RestTemplate添加请求头

//请求添加token头
HttpHeaders headers = new HttpHeaders();
headers.add("token",token);
HttpEntity<String> requestEntity = new HttpEntity<>(null, headers);
ResponseEntity<String> resEntity = restTemplate.exchange(url.toString(), HttpMethod.GET, requestEntity, String.class);
//请求结果
String str = resEntity.getBody();

总结

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

相关文章

  • Java 枚举类和自定义枚举类和enum声明及实现接口的操作

    Java 枚举类和自定义枚举类和enum声明及实现接口的操作

    这篇文章主要介绍了Java 枚举类和自定义枚举类和enum声明及实现接口的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • Java反射获取所有Controller和RestController类的方法

    Java反射获取所有Controller和RestController类的方法

    这篇文章给大家分享了Java反射获取所有Controller和RestController类的方法,文中有详细的代码示例讲解,具有一定的参考价值,需要的朋友可以参考下
    2023-08-08
  • Java+Ajax实现的用户名重复检验功能实例详解

    Java+Ajax实现的用户名重复检验功能实例详解

    这篇文章主要介绍了Java+Ajax实现的用户名重复检验功能,结合实例形式详细分析了java针对用户名提交的ajax数据库查询与重复检查功能相关实现技巧与操作注意事项,需要的朋友可以参考下
    2018-12-12
  • Java中使用COS实现文件上传功能

    Java中使用COS实现文件上传功能

    cos是O'Rrilly公司开发的一款用于HTTP上传文件的OpenSource组件。下面通过本文给大家分享使用COS实现文件上传功能,感兴趣的朋友一起看看吧
    2017-08-08
  • Java线程池八股及实现过程

    Java线程池八股及实现过程

    线程池的八股包括线程池的核心参数、执行原理、拒绝策略、阻塞队列、核心线程数的确定、线程池种类、不建议使用Executors创建线程池的原因、ThreadLocal的理解及ThreadLocal的内存泄露问题,展示了线程池的运行机制,本文介绍Java线程池八股及实现,感兴趣的朋友一起看看吧
    2026-01-01
  • Java单列集合Collection常用方法示例详解

    Java单列集合Collection常用方法示例详解

    这篇文章主要介绍了Java单列集合Collection常用方法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • SpringMVC中@ModelAttribute与@RequestBody的区别及说明

    SpringMVC中@ModelAttribute与@RequestBody的区别及说明

    这篇文章主要介绍了SpringMVC中@ModelAttribute与@RequestBody的区别及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • Spring Cache手动清理Redis缓存

    Spring Cache手动清理Redis缓存

    这篇文章主要介绍了Spring Cache手动清理Redis缓存,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • Spring Boot 中的静态资源放置位置

    Spring Boot 中的静态资源放置位置

    这篇文章主要介绍了Spring Boot 中的静态资源到底要存放哪里,很多童鞋对这个问题很纠结,接下来通过本文给大家介绍下,需要的朋友可以参考下
    2019-04-04
  • RocketMQ offset确认机制示例详解

    RocketMQ offset确认机制示例详解

    这篇文章主要为大家介绍了RocketMQ offset确认机制示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09

最新评论