我的编程空间,编程开发者的网络收藏夹
学习永远不晚

RestTemplate怎么实现发送带headers的GET请求

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

RestTemplate怎么实现发送带headers的GET请求

这篇文章主要讲解了“RestTemplate怎么实现发送带headers的GET请求”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“RestTemplate怎么实现发送带headers的GET请求”吧!

RestTemplate 发送带headers的GET请求

需求:发送自定义header的GET请求,header中需要插入一个签名。

发送自定义header的POST请求

之前写过一个类似的请求,但是是POST的。这个也摸了一段时间,自己看参数整了出来。代码如下:

// header填充LinkedMultiValueMap<String, String> headers = new LinkedMultiValueMap<>();headers.put("Content-Type", Collections.singletonList("application/json;charset=UTF-8"));headers.put("signature", Collections.singletonList(makeSignature(form.getNewMobile())));// body填充JSONObject json = new JSONObject();json.put("oldMobile", mobile);json.put("newMobile", form.getNewMobile());HttpEntity<String> request = new HttpEntity<String>(json.toString(), headers);// 一个单例的restTemplateRestTemplate restTemplate = HttpInvoker.getRestTemplate();// 发送请求ResponseEntity<String> response = restTemplate.postForEntity(whiteListURL, request, String.class);

很简单的想着,只需要把上面的postForEntity()改成get的就行,但不是这样的。

Update: 2019/12/11

从链接学到了一种比较友好的写法:

private static void getEmployees(){    final String uri = "http://localhost:8080/springrestexample/employees";    RestTemplate restTemplate = new RestTemplate();    HttpHeaders headers = new HttpHeaders();    headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));    HttpEntity<String> entity = new HttpEntity<String>("parameters", headers);         ResponseEntity<String> result = restTemplate.exchange(uri, HttpMethod.GET, entity, String.class);         System.out.println(result);}

粗略看了看postForEntity()和getForEntity()这两个方法的实现,都是准备参数,然后调用execute()方法,如下:

// POST@Overridepublic <T> ResponseEntity<T> postForEntity(String url, @Nullable Object request,Class<T> responseType, Object... uriVariables) throws RestClientException {RequestCallback requestCallback = httpEntityCallback(request, responseType);ResponseExtractor<ResponseEntity<T>> responseExtractor = responseEntityExtractor(responseType);return nonNull(execute(url, HttpMethod.POST, requestCallback, responseExtractor, uriVariables));}// GET@Override@Nullablepublic <T> T getForObject(String url, Class<T> responseType, Map<String, ?> uriVariables) throws RestClientException {RequestCallback requestCallback = acceptHeaderRequestCallback(responseType);HttpMessageConverterExtractor<T> responseExtractor =new HttpMessageConverterExtractor<>(responseType, getMessageConverters(), logger);return execute(url, HttpMethod.GET, requestCallback, responseExtractor, uriVariables);}

区别就在于RequestCallback实例化的时候,传的参数不一样。POST的时候,是将header做为参数传给了RequestCallback。再然后就是execute()中的GET和POST参数不一样。到这个时候,发送自定义header的GET请求,已经很明显了。

实例化的函数,都是public的

如果不是public的,或者说我们不能直接访问到,还可以考虑通过反射的方式去调用相关的方法,但这里不需要用反射了。

结果

// header填充LinkedMultiValueMap<String, String> headers = new LinkedMultiValueMap<>();headers.put("Content-Type", Collections.singletonList("application/json;charset=UTF-8"));headers.put("signature", Collections.singletonList(makeSignature(mobile)));// 获取单例RestTemplateRestTemplate restTemplate = HttpInvoker.getRestTemplate();HttpEntity request = new HttpEntity(headers);// 构造execute()执行所需要的参数。RequestCallback requestCallback = restTemplate.httpEntityCallback(request, JSONObject.class);ResponseExtractor<ResponseEntity<JSONObject>> responseExtractor = restTemplate.responseEntityExtractor(JSONObject.class);// 执行execute(),发送请求ResponseEntity<JSONObject> response = restTemplate.execute(apiAddress + "/xxx/whitelist/check?phone=" + mobile, HttpMethod.GET, requestCallback, responseExtractor);

虽然很简单,但是看似不可能,自己却做到了、完成了,就很有成就感。

RestTemplate优雅的发送Get请求

在我们的项目中,如果借助RestTemplate发送带参数的Get请求,我们可以通过拼接字符串的方式将url拼接出来,比如下面这种方式:

String url = "http://127.0.0.1:8080/rest/get?name="+ name +"&id=" + id;ResponseEntity<RestVO> forEntity = restTemplate.getForEntity(url, RestVO.class);

然而这种方式不太优雅,我们还可以通过以下几种方式发送Get请求

方式1:使用占位符

String url = "http://127.0.0.1:8080/rest/path/{name}/{id}";Map<String, Object> params = new HashMap<>();params.put("name", "这是name");params.put("id", 1L);ResponseEntity<RestVO> forEntity = restTemplate.getForEntity(url, RestVO.class, params);

Map的key要和url中的占位符一致

方式2:使用LinkedMultiValueMap和UriComponentsBuilder

String url = "http://127.0.0.1:8080/rest/get";MultiValueMap<String, String> params = new LinkedMultiValueMap<>();params.add("name", "这是name");params.add("id", "1");UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url);URI uri = builder.queryParams(params).build().encode().toUri(); ResponseEntity<RestVO> forEntity = restTemplate.getForEntity(uri, RestVO.class);return forEntity.getBody();

方式2看起来是最优雅的,将参数的设置和url分离。

感谢各位的阅读,以上就是“RestTemplate怎么实现发送带headers的GET请求”的内容了,经过本文的学习后,相信大家对RestTemplate怎么实现发送带headers的GET请求这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

RestTemplate怎么实现发送带headers的GET请求

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

RestTemplate怎么实现发送带headers的GET请求

这篇文章主要讲解了“RestTemplate怎么实现发送带headers的GET请求”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“RestTemplate怎么实现发送带headers的GET
2023-06-25

HttpClient怎么发送Get请求

HttpClient可以以多种方式发送GET请求,以下是其中的一种示例代码:```javaimport org.apache.http.HttpEntity;import org.apache.http.HttpResponse;impor
2023-08-24

linux中怎么发送get请求

在Linux系统中,您可以使用curl命令来发送GET请求。下面是一个示例:curl -X GET http://example.com/api/resource在上面的示例中,我们使用curl命令发送一个GET请求到http://exa
linux中怎么发送get请求
2024-03-02

Python中怎么发送Get请求

这篇文章将为大家详细讲解有关Python中怎么发送Get请求,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、Python 命名规范1.是英文字符、下划线__、数字三个组成。2.项目(工程)
2023-06-15

SpringMVC中怎么发送GET、POST请求

SpringMVC中怎么发送GET、POST请求,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。我们知道发起 GET 请求和 POST 请求,只需要在表单的 form 标签中,设
2023-06-02

怎么用VBS实现发送带Cookie的HTTP请求

这篇文章主要介绍怎么用VBS实现发送带Cookie的HTTP请求,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!为了方便测试,先写一个回显Cookie的简单的PHP程序: 代码如下:
2023-06-08

java怎么发送get请求header传参

在Java中发送GET请求并传递header参数,可以使用`java.net.HttpURLConnection`类。下面是一个示例代码:import java.io.BufferedReader;import java.io.Inpu
2023-10-26

怎么在PHP项目中发送GET请求

这期内容当中小编将会给大家带来有关怎么在PHP项目中发送GET请求,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。方法一:用fopen()打开url
2023-06-14

Python Http发送请求怎么实现

本篇内容介绍了“Python Http发送请求怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!浅析requests在不借助其他第三方库
2023-07-02

Golang中怎么实现GET请求

这篇文章主要讲解了“Golang中怎么实现GET请求”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Golang中怎么实现GET请求”吧!一、Golang中的GET请求在Golang中,我们可
2023-07-05

Python 使用requests模块发送GET和POST请求的实现代码

①GET# -*- coding:utf-8 -*-import requestsdef get(url, datas=None):response = requests.get(url, params=datas)json = respo
2022-06-04

利用java实现发送http或get请求的方法有哪些

这篇文章将为大家详细讲解有关利用java实现发送http或get请求的方法有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、第一种方式,通过HttpClient方式,代码如下:publ
2023-05-31

Nodejs怎么实现简单的GET请求

这篇文章主要介绍了Nodejs怎么实现简单的GET请求,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。GET请求的识别非常的简单,就是URL的识别,使用的是url.parse(
2023-06-15

Qt怎么实现HTTP的Get/Post请求

本文小编为大家详细介绍“Qt怎么实现HTTP的Get/Post请求”,内容详细,步骤清晰,细节处理妥当,希望这篇“Qt怎么实现HTTP的Get/Post请求”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。借助Qt的
2023-06-30

python使用requests实现发送带文件请求功能

这篇文章主要介绍了python使用requests实现发送带文件请求,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2022-12-08

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录