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();

总结

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

相关文章

  • idea项目全局去掉严格的语法校验方式

    idea项目全局去掉严格的语法校验方式

    这篇文章主要介绍了idea项目全局去掉严格的语法校验方式,具有很好的参考价值,希望对大家有所帮助。
    2023-04-04
  • 基于@JsonFormat的导包问题

    基于@JsonFormat的导包问题

    这篇文章主要介绍了关于@JsonFormat的导包问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Java中如何使用正则表达式提取各种类型括号中的内容

    Java中如何使用正则表达式提取各种类型括号中的内容

    最近在工作中遇到一个问题,就是需要一个字符串中每一个中括号里的内容,下面这篇文章主要给大家介绍了关于Java中如何使用正则表达式提取各种类型括号中的内容,需要的朋友可以参考下
    2023-06-06
  • SpringBoot集成Redis及SpringCache缓存管理示例详解

    SpringBoot集成Redis及SpringCache缓存管理示例详解

    本文介绍了如何在SpringBoot中集成Redis并使用SpringCache进行缓存管理,详解了Redis的配置、使用以及SpringCache的注解,还阐述了SpringCache的工作原理,包括其AOP实现和与各种缓存框架的集成,使得开发者可以轻松实现缓存功能,以提高应用性能
    2024-09-09
  • java实现文件重命名

    java实现文件重命名

    这篇文章主要为大家详细介绍了java实现文件重命名,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • SpringMVC的执行过程浅析

    SpringMVC的执行过程浅析

    这篇文章主要给大家介绍了关于SpringMVC的执行过程的相关资料,文中通过图文介绍的非常详细,对大家的学习或者使用SpringMVC具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03
  • SpringBoot利用validation实现优雅的校验参数

    SpringBoot利用validation实现优雅的校验参数

    数据的校验是交互式网站一个不可或缺的功能,如果数据库中出现一个非法的邮箱格式,会让运维人员头疼不已。本文将介绍如何利用validation来对数据进行校验,感兴趣的可以跟随小编一起学习一下
    2022-06-06
  • SpringBoot框架整合SwaggerUI的示例代码

    SpringBoot框架整合SwaggerUI的示例代码

    项目中使用了很多现成的框架,都是项目经理、架构师带来的,从来没有自己整合过,今天给大家介绍下SpringBoot框架整合SwaggerUI的过程,感兴趣的朋友跟随小编一起看看吧
    2022-02-02
  • Java结构型设计模式之装饰模式详解

    Java结构型设计模式之装饰模式详解

    装饰模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能
    2023-03-03
  • SpringBoot如何正确配置并运行Kafka

    SpringBoot如何正确配置并运行Kafka

    这篇文章主要介绍了SpringBoot如何正确配置并运行Kafka问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07

最新评论