Spring RestTemplate的使用与踩坑
作者:爱学习的大雄 时间:2022-01-12 21:43:14
引言
最近的项目需求中有使用到后端发送http请求,在网上寻找资料后发现可以使用spring自带的RestTemplate类实现,故作此记录
项目使用
将下述代码引入spring容器中(RestTemplate是spring自带的发送http请求的类)
@Bean
public RestTemplate restTemplate(ClientHttpRequestFactory factory) {
RestTemplate restTemplate = new RestTemplate(factory);
return restTemplate;
}
@Bean
public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
factory.setReadTimeout(5000);
factory.setConnectTimeout(15000);
// 设置代理
//factory.setProxy(null);
return factory;
}
在需要使用的类中直接引入即可
@Autowired
private RestTemplate restTemplate;
代码示例
这里简单示例下post请求,如果又其它需求的可以去搜索一下其它文章
**注意:**发送的post的传参的类型一定要是LinkedMultiValueMap
(不能使用jsonobject),否则会报找不到数据的错误
@GetMapping("send")
public String testPost(@RequestParam("code") Integer code){
String url = "http://localhost:8888/oauth/return";
LinkedMultiValueMap<String, Object> stringObjectLinkedMultiValueMap = new LinkedMultiValueMap<>();
stringObjectLinkedMultiValueMap.set("code",code);
HttpEntity<LinkedMultiValueMap<String, Object>> jsonObjectHttpEntity = new HttpEntity<>(stringObjectLinkedMultiValueMap);
ResponseEntity<String> stringResponseEntity = restTemplate.postForEntity(url, jsonObjectHttpEntity, String.class);
String body = stringResponseEntity.getBody();
return body;
}
@PostMapping("return")
public String returnPost(@RequestParam Integer code){
return "哈首府帕斯发";
}
踩坑记录
发送POST请求传参的问题
如下代码,如果使用jsonobject来装载数据发送post请求是会报错的,只能使用LinkedMultiValueMap
@GetMapping("keycloak/getToken")
public String keycloakGetToken(@RequestParam Map<String,String> map){
//String code = requestObj.getString("code");
String url = "http://localhost:8081/auth/realms/myRealm/protocol/openid-connect/token";
String code = map.get("code");
System.out.println("传进来的code:"+code);
//HttpHeaders headers = new HttpHeaders();
//JSONObject jsonObject = new JSONObject();
//jsonObject.put("grant_type","authorization_code");
//jsonObject.put("code",code);
//jsonObject.put("client_id","myclient");
//jsonObject.put("client_secret","LsvDoZ5g0BQhRDR9ydYqV9tjal8YDeAI");
//jsonObject.put("scope","openid");
//jsonObject.put("redirect_uri","http://localhost:8888/oauth/keycloak/getToken");
//HttpEntity<JSONObject> jsonObjectHttpEntity = new HttpEntity<>(jsonObject,headers);
LinkedMultiValueMap<String, Object> stringObjectLinkedMultiValueMap = new LinkedMultiValueMap<>();
stringObjectLinkedMultiValueMap.set("grant_type","authorization_code");
stringObjectLinkedMultiValueMap.set("code",code);
stringObjectLinkedMultiValueMap.set("client_id","myclient");
stringObjectLinkedMultiValueMap.set("client_secret","LsvDoZ5g0BQhRDR9ydYqV9tjal8YDeAI");
stringObjectLinkedMultiValueMap.set("scope","openid");
stringObjectLinkedMultiValueMap.set("redirect_uri","http://localhost:8888/oauth/keycloak/getToken");
HttpEntity<LinkedMultiValueMap<String, Object>> jsonObjectHttpEntity = new HttpEntity<>(stringObjectLinkedMultiValueMap);
ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, jsonObjectHttpEntity, String.class);
String body = responseEntity.getBody();
return body;
}
来源:https://blog.csdn.net/qq_49137582/article/details/128768209
标签:Spring,RestTemplate
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
java中request常用方法小结
2022-09-13 06:19:45
![](https://img.aspxhome.com/file/2023/5/82995_0s.png)
java8 stream多字段排序的实现
2021-07-30 17:47:47
java多线程下载实例详解
2023-05-19 05:53:37
![](https://img.aspxhome.com/file/2023/9/116179_0s.png)
Android自定义控件案例汇总1(菜单、popupwindow、viewpager)
2021-11-22 14:37:32
Java实现循环体的过滤器的方法
2023-11-22 09:35:33
![](https://img.aspxhome.com/file/2023/6/68166_0s.png)
Android蓝牙库FastBle的基础入门使用
2021-09-21 07:34:21
Java多线程编程之ThreadLocal线程范围内的共享变量
2022-03-10 00:41:05
![](https://img.aspxhome.com/file/2023/2/67102_0s.jpg)
java调用shell命令并获取执行结果的示例
2021-07-06 06:17:54
Java 求解如何把二叉搜索树转换为累加树
2021-11-19 14:09:54
![](https://img.aspxhome.com/file/2023/8/61018_0s.png)
详解C#如何实现读写ini文件
2022-02-04 23:15:27
![](https://img.aspxhome.com/file/2023/9/82139_0s.png)
SpringMVC文件上传原理及实现过程解析
2021-09-03 00:24:25
![](https://img.aspxhome.com/file/2023/3/85433_0s.png)
Java设计模式之访问者模式
2023-04-17 20:00:15
![](https://img.aspxhome.com/file/2023/5/60135_0s.png)
Android 控制wifi 相关操作实例
2023-09-08 20:35:49
Springboot jpa @Column命名大小写问题及解决
2023-02-19 03:24:21
一篇文章带你了解Java Stream流
2022-11-05 10:26:18
Java事件处理机制和适配器全面解析
2021-10-23 04:19:32
![](https://img.aspxhome.com/file/2023/0/73070_0s.png)
opencv3/C++图像滤波实现方式
2023-06-23 15:37:08
![](https://img.aspxhome.com/file/2023/0/82530_0s.jpg)
java多线程Synchronized实现可见性原理解析
2021-08-26 02:10:02
![](https://img.aspxhome.com/file/2023/6/71216_0s.jpg)
使用Spring自定义注解实现任务路由的方法
2023-12-20 22:34:11
C# PDF转图片(JPG,Png)的项目实践
2021-11-10 17:59:24
![](https://img.aspxhome.com/file/2023/7/92907_0s.png)