RestTemplate调用POST和GET请求示例详解

 更新时间:2023年03月31日 10:28:01   作者:ambitioncoder  
这篇文章主要为大家介绍了RestTemplate调用POST和GET请求示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

正文

在日常开发过程中,http接口不仅提供给前端调用,有的时候还需要提供给其他业务方调用,在后台调用http请求的时候,我们一般使用Http Client客户端调用,java常用的Http客户端有:

  • java原生的HttpURLConnection
  • Apache http client
  • OkHttp
  • RestTemplate

下面来详细介绍一下使用RestTemplate来调用Post和Get请求。

在RestTemplate中,对同一种请求方式,一般有两种调用方法:

  • xxForObject
    • 返回一个指定类型的对象,通常是响应体反序列化后的java对象
    • 只返回反序列化的java对象,没有额外的http相应信息,只知道请求是否成功。
  • xxForEntity
    • 返回的是一个ResponseEntity对象,其中包含完整的http响应信息(状态码、响应头、响应体)

一、POST请求调用

  • postForObject
/**
    String/URI url: 请求的URL路径
    request: 一般设置请求头和请求体
    responseType:请求完成之后返回的结果类型
    Map<String, ?>/Object... uriVariables: 用来拼接请求url,可以是Map<String, ?>类型或Object类型可变参数
**/
postForObject/postForEntity(String url, Object request, Class<T> responseType, Object... uriVariables)
eg:
void fun() {
    HttpHeaders headers = new HttpHeaders(); 
    headers.setContentType(MediaType.APPLICATION_JSON);
    MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
    HttpEntity<String> httpEntity = new HttpEntity<>(params, headers);
    // 注意,如果想要使用可变参数来拼接url,那这里的url一定要使用占位符{}替换,并且名称要和可变参数名称一样才能在运行时将占位符位置替换成传入动态参数【可变参数也可以不传,那么这里的url就不需要占位符拼接】
    String url = "http://www.sea.com?uid={uid}&username={username}";
    String uid = "123";
    String username = "sea";
    // 因为responseType用的是String类型,所以返回的是一个String类型字符串
    String result = restTemplate.postForObject(url, httpEntity, String.class, uid, username);
}
postForObject/postForEntity(String url, Object request, Class<T> responseType, Map<String, ?> uriVariables)
eg:
void fun() {
    HttpHeaders headers = new HttpHeaders(); 
    headers.setContentType(MediaType.APPLICATION_JSON);
    MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
    HttpEntity<String> httpEntity = new HttpEntity<>(params, headers);
    // 注意,如果想要使用可变参数来拼接url,那这里的url一定要使用占位符{}替换,并且名称要和可变参数名称一样才能在运行时将占位符位置替换成传入动态参数
    String url = "http://www.sea.com?uid={uid}&username={username}";
    Map<String, Object> params = new HashMap<>();
    String uid = "123";
    String username = "sea";
    params.put("uid", uid);
    params.put("username", username)
    // 因为responseType用的是String类型,所以返回的是一个String类型字符串
    String result = restTemplate.postForObject(url, httpEntity, String.class, params);
}
postForObject/postForEntity(URI url, Object request, Class<T> responseType)
eg:
void fun() {
    HttpHeaders headers = new HttpHeaders(); 
    headers.setContentType(MediaType.APPLICATION_JSON);
    MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
    HttpEntity<String> httpEntity = new HttpEntity<>(params, headers);
    String url = "http://www.sea.com";
    MultiValueMap<String, String> multiValueMap = new LinkedMultiValueMap<>();
    multiValueMap.put("uid", 123);
    multiValueMap.put("username", "sea");
    // 不再使用可变参数绑定url,直接传入绑定后的uri参数
    URI uri = UriComponentsBuilder.fromHttpUrl(url).queryParams(multiValueMap).build().encode().toUri();
    // 因为responseType用的是String类型,所以返回的是一个String类型字符串
    String result = restTemplate.postForObject(uri, httpEntity, String.class);
}
eg: xxforEntity()
void fun() {
    Map<String, Object> map = new HashMap<>();
    map.put("uid", 123);
    map.put("username", "sea");
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    HttpEntity<HashMap<String, Object>> httpEntity = new HttpEntity<>(map, headers);
    String url = "http://www.sea.com";
    // 使用xxforEntity,返回的是一个ResponseEntity,里面包含了statusCode(状态码)、Headers(响应头)、body(响应体)
    ResponseEntity<String> responseEntity = restTemplate.postForEntity(uri, httpEntity, String.class);
}

二、GET请求调用

getForObject/getForEntity(String url, Class<T> responseType, Object... uriVariables)
getForObject/getForEntity(String url, Class<T> responseType, Map<String, ?> uriVariables)
getForObject/getForEntity(URI url, Class<T> responseType)
在get请求调用中,除了请求参数中少了Object request【请求头和请求体】,其他的参数和方法调用同上面post的方法调用是一样的

三、Exchange调用

exchange调用可以理解为是一个万能调用,不特定是post还是get类型调用,请求方式由调用者指定。 ps:如果在get请求中需要指定请求头和请求体,而getForXX又不支持方法又不支持设置请求头,此时可以改成用exchange方法来调用,自己往HttpEntity<?> requestEntity参数中设置请求头和体。

以上就是RestTemplate调用POST和GET请求示例详解的详细内容,更多关于RestTemplate调用POST GET的资料请关注脚本之家其它相关文章!

相关文章

  • JavaSE、JavaEE和JavaWeb三大工程目录详解

    JavaSE、JavaEE和JavaWeb三大工程目录详解

    这篇文章主要给大家介绍了关于JavaSE、JavaEE和JavaWeb三大工程目录的相关资料,很多对java不是很了解的同学在看到课程⼤纲的时候发现⾥⾯出现了JavaSE、JavaEE、JavaME、JavaWEB这些词,搞得⼀头雾⽔,需要的朋友可以参考下
    2023-07-07
  • 排序算法图解之Java冒泡排序及优化

    排序算法图解之Java冒泡排序及优化

    冒泡排序即通过对待排序的序列从前往后,依次比较相邻元素的值,若发现逆序则交换位置,使较大的元素逐渐移动到后部。本文通过图片和示例介绍了冒泡排序的实现及优化,需要的可以参考一下
    2022-11-11
  • 使用Spring来创建一个简单的工作流引擎

    使用Spring来创建一个简单的工作流引擎

    这篇文章主要给大家介绍了关于使用Spring来创建一个简单的工作流引擎的相关资料,需要的朋友可以参考下
    2006-12-12
  • mybatis的好帮手之MybatisCodeHelperPro详解

    mybatis的好帮手之MybatisCodeHelperPro详解

    这篇文章主要介绍了mybatis的好帮手之MybatisCodeHelperPro详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • Java新手环境搭建 JDK8安装配置教程

    Java新手环境搭建 JDK8安装配置教程

    这篇文章主要为大家详细介绍了Java新手环境搭建,JDK8安装配置教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • Java项目安全处理方法

    Java项目安全处理方法

    这篇文章主要介绍了Java项目安全处理方法,URL中参数显示,sql拼接问题,需要的朋友可以参考下
    2017-09-09
  • Mybatis-Plus中使用@DS注解动态选择数据源的源码解读

    Mybatis-Plus中使用@DS注解动态选择数据源的源码解读

    这篇文章主要介绍了Mybatis-Plus中使用@DS注解动态选择数据源的源码解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • Java基础-Java变量的声明和作用域

    Java基础-Java变量的声明和作用域

    这篇文章主要介绍了Java变量的声明和作用域,变量其实就是内存中的一个存储空间,用来存储数据,具体的相关内容,需要的小伙伴可以参考下面文章内容
    2022-01-01
  • java接口自动化测试框架及断言详解

    java接口自动化测试框架及断言详解

    这篇文章主要介绍了java接口自动化测试框架及断言详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • IDEA中HTML通过servlet3.0注解名提交表单到servlet类找不到页面的问题

    IDEA中HTML通过servlet3.0注解名提交表单到servlet类找不到页面的问题

    这篇文章主要介绍了IDEA中HTML通过servlet3.0注解名提交表单到servlet类找不到页面的问题,本文通过场景描述及问题解析,给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07

最新评论