首页 > 其他分享 >springboot中RestTemplate的用法

springboot中RestTemplate的用法

时间:2023-03-13 23:12:47浏览次数:55  
标签:http springboot RestTemplate new 用法 org apache import

配置RestTemplate用于get请求携带multipart/form-data数据

原生的RestTemplate在发送get请求时,无法携带body数据,但是有时候咱们的业务场景需要这样做,所以我们可以对RestTemplate重新配置达到该目的。

 

 1 package com.syx.config;
 2 
 3 import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
 4 import org.apache.http.client.methods.HttpUriRequest;
 5 import org.apache.http.config.Registry;
 6 import org.apache.http.config.RegistryBuilder;
 7 import org.apache.http.conn.socket.ConnectionSocketFactory;
 8 import org.apache.http.conn.socket.PlainConnectionSocketFactory;
 9 import org.apache.http.impl.client.HttpClientBuilder;
10 import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
11 import org.springframework.context.annotation.Bean;
12 import org.springframework.context.annotation.Configuration;
13 import org.springframework.http.HttpMethod;
14 import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
15 import org.springframework.web.client.RestTemplate;
16 
17 import java.net.URI;
18 
19 /**
20  * @author:whh
21  * @date: 2022-11-07 20:42
22  * <p></p>
23  */
24 @Configuration
25 public class RestTemplateConfig {
26 
27     @Bean
28     public RestTemplate restTemplate(){
29         RestTemplate restTemplate = new RestTemplate();
30         HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory() {
31             @Override
32             protected HttpUriRequest createHttpUriRequest(HttpMethod httpMethod, URI uri) {
33                 if (httpMethod == HttpMethod.GET) {
34                     return new HttpGetRequestWithEntity(uri);
35                 }
36                 return super.createHttpUriRequest(httpMethod, uri);
37             }
38         };
39 
40         /**
41          * 使用客户端类API调用远程交易时必须设置相应的超时时间,如果远程交易有问题如长时间未响应,若未设置超时时间,则会耗尽客户端所在服务器的资源
42          */
43         // 连接超时
44         requestFactory.setConnectTimeout(5000);
45         //读超时
46         requestFactory.setReadTimeout(10000);
47         //连接池获取连接超时时间
48         requestFactory.setConnectionRequestTimeout(5000);
49 
50         HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
51         //Httpclient连接池的方式,同时支持netty,okHttp以及其他http框架
52         PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
53         // 最大连接数
54         connectionManager.setMaxTotal(200);
55         // 同路由并发数
56         connectionManager.setDefaultMaxPerRoute(50);
57         //配置连接池
58         httpClientBuilder.setConnectionManager(connectionManager);
59 
60         // 最大连接数
61         connectionManager.setMaxTotal(500);
62         // 同路由并发数(每个主机的并发)
63         connectionManager.setDefaultMaxPerRoute(100);
64         httpClientBuilder.setConnectionManager(connectionManager);
65         requestFactory.setHttpClient(httpClientBuilder.build());
66         restTemplate.setRequestFactory(requestFactory);
67         return restTemplate;
68     }
69 
70     private static final class HttpGetRequestWithEntity extends HttpEntityEnclosingRequestBase {
71         public HttpGetRequestWithEntity(final URI uri) {
72             super.setURI(uri);
73         }
74         @Override
75         public String getMethod() {
76             return HttpMethod.GET.name();
77 
78         }
79     }
80 }

重写一下HttpComponentsClientHttpRequestFactory 的createHttpUriRequest方法在请求方式为get的时候使用我们自定义的HttpGetRequestWithEntity 类

 1  @Test
 2     public void func2() {
 3         HttpHeaders headers = new HttpHeaders();
 4         headers.setContentType(MediaType.MULTIPART_FORM_DATA);
 5         MultiValueMap<String, String> form = new LinkedMultiValueMap<>();
 6         form.add("id", "1");
 7         form.add("name", "张三");
 8         form.add("sex","男");
 9         String uri = "http://localhost:8888/user/test";
10         HttpEntity< MultiValueMap<String, String>> entity = new HttpEntity<>(form,headers);
11         ResponseEntity<String> response = restTemplate.exchange(uri, HttpMethod.GET, entity, String.class);
12         System.out.println(response.getBody());
13 
14     }

服务端代码:

1  @RequestMapping(value = "/test",method = RequestMethod.GET)
2     public User query(User user){
3         return user;
4     }

 

标签:http,springboot,RestTemplate,new,用法,org,apache,import
From: https://www.cnblogs.com/DPC27149/p/17213293.html

相关文章

  • Python列表、元组、字典和集合的用法
    1.列表标志符号是[],元素可以修改、删除和新增1.1提取元素(索引从0开始计算)testList=['A','B','C',1,'D']print(testList[1])#打印索引区间[1,4)print(testList[0:3]......
  • SpringBoot--过滤器/拦截器/AOP--区别/使用/顺序
    SpringBoot--过滤器/拦截器/AOP--区别/使用/顺序https://knife.blog.csdn.net/article/details/121387483?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant......
  • @ControllerAdvice 的介绍及三种用法
    @ControllerAdvice的介绍及三种用法https://blog.csdn.net/qq_36829919/article/details/101210250?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.n......
  • SpringBoot框架(43):POI高效导出百万级Excel数据?
    Excel简介什么是excel就不用介绍了,这里主要说明不同版本下每个sheet下的行列限制。版本区间行数列数生成文件后缀   image.png由上面可知Exce......
  • Mybatis+SpringBoot集成+Plus+Generator
    前言1.本文主要记录mybatis的使用及核心原理、mybatis集成springboot项目的相关内容、mybatis-plus概述和核心功能的使用。2.相关官网文档链接:(1)mybatis:https://mybatis......
  • day01-SpringBoot基本介绍
    SpringBoot基本介绍1.SpringBoot是什么?官网地址:https://spring.io/projects/spring-boot学习文档:https://docs.spring.io/spring-boot/docs/2.7.10-SNAPSHOT/reference......
  • springboot:dynamic-datasource
    dynamic-datasource可以动态的配置多数据源,配置简易,使用方便。pom.xml配置<!--druid--><dependency><groupId>com.alibaba</groupId><artifactId>druid-s......
  • Golang的defer用法
    直观理解deferpackagemainimport("fmt")funcmain(){fmt.Println("deferbegin")//将defer放入延迟调用栈deferfmt.Println(1)def......
  • 007 springboot集合mybatis-plus,使用其中的代码生成器
    代码生成器步骤一:在pom.xml中添加相应的依赖<!--代码生成器--><dependency><groupId>com.baomidou</groupId><artifactId>......
  • 【MAVEN】SpringBoot打包之spring-boot-maven-plugin插件
    背景maven要怎样才能打包呢,打的包为什么运行不起来呢?——关于这个问题,一直都没有很理解得很透彻。虽然现在也没有很清楚。现在就说问题,怎样去打一个flatJar呢,就是jav......