网站后台管理系统哪个好,.net网站 作品,无为教育网站,重庆网站建设夹夹虫目录
一、RestTemplate配置
1、将RestTemplate初始化为Bean
2、使用HttpClient作为RestTemplate客户端
#xff08;1#xff09;引入HttpClient依赖
#xff08;2#xff09;修改RestTemplate配置类
3、设置拦截器
#xff08;1#xff09;新增拦截器类
#xf…目录
一、RestTemplate配置
1、将RestTemplate初始化为Bean
2、使用HttpClient作为RestTemplate客户端
1引入HttpClient依赖
2修改RestTemplate配置类
3、设置拦截器
1新增拦截器类
2设置拦截器
4、新增支持的媒体类型
二、RestTemplate使用
1、RestTemplate注入
2、无参数get请求测试
1Controller代码
2RestTemplate单元测试
3、带参get请求测试
1Controller代码
2RestTemplate单元测试
4、带占位符参数的get请求测试
1Controller代码
2RestTemplate单元测试
5、post请求测试
1Article实体类
2Controller代码
3RestTemplate单元测试
6、设置请求头
1Article实体类
2Controller代码
3RestTemplate单元测试
7、上传文件
1Controller代码
2RestTemplate单元测试
8、文件下载
1Controller代码
2RestTemplate单元测试
三、参考 一、RestTemplate配置
1、将RestTemplate初始化为Bean
package com.xiaobai.conf;import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;import java.util.Collections;/*** Author 王天文* Date 2024/12/29 18:06* Description: RestTemplate配置类*/
Configuration
public class RestTemplateConf {/*** 当指定类型Bean不存在时会创建一个新的Bean如果用户自定义了Bean,将使用用户自定义的Bean* return*/ConditionalOnMissingBean(RestTemplate.class)Beanpublic RestTemplate restTemplate() {// 使用JDK自带的HttpURLConnection作为客户端RestTemplate restTemplate new RestTemplate();return restTemplate;}
}2、使用HttpClient作为RestTemplate客户端
1引入HttpClient依赖 !--httpclient--dependencygroupIdorg.apache.httpcomponents/groupIdartifactIdhttpclient/artifactIdversion4.5.7/version/dependency
2修改RestTemplate配置类
package com.xiaobai.conf;import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;import java.util.Collections;/*** Author 王天文* Date 2024/12/29 18:06* Description: RestTemplate配置类*/
Configuration
public class RestTemplateConf {/*** 当指定类型Bean不存在时会创建一个新的Bean如果用户自定义了Bean,将使用用户自定义的Bean* return*/ConditionalOnMissingBean(RestTemplate.class)Beanpublic RestTemplate restTemplate() {// 使用httpclient作为底层客户端RestTemplate restTemplate new RestTemplate(getClientHttpRequestFactory());return restTemplate;}/*** 使用httpclient作为底层客户端* return*/Beanpublic ClientHttpRequestFactory getClientHttpRequestFactory() {int timeout 50000;RequestConfig requestConfig RequestConfig.custom().setConnectTimeout(timeout).setConnectionRequestTimeout(timeout).setSocketTimeout(timeout).build();CloseableHttpClient httpClient HttpClientBuilder.create().setDefaultRequestConfig(requestConfig).build();return new HttpComponentsClientHttpRequestFactory(httpClient);}
}3、设置拦截器
1新增拦截器类
package com.xiaobai.conf;import org.springframework.http.HttpRequest;
import org.springframework.http.client.ClientHttpRequestExecution;
import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.http.client.ClientHttpResponse;import java.io.IOException;/*** Author 王天文* Date 2024/12/22 21:51* Description: restTemplate拦截器*/
public class RestTemplateInterceptor implements ClientHttpRequestInterceptor {Overridepublic ClientHttpResponse intercept(HttpRequest httpRequest,byte[] bytes,ClientHttpRequestExecution clientHttpRequestExecution) throws IOException {ClientHttpResponse httpResponse clientHttpRequestExecution.execute(httpRequest, bytes);return httpResponse;}
}2设置拦截器
package com.xiaobai.conf;import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;import java.util.Collections;/*** Author 王天文* Date 2024/12/29 18:06* Description: RestTemplate配置类*/
Configuration
public class RestTemplateConf {/*** 当指定类型Bean不存在时会创建一个新的Bean如果用户自定义了Bean,将使用用户自定义的Bean* return*/ConditionalOnMissingBean(RestTemplate.class)Beanpublic RestTemplate restTemplate() {// 使用JDK自带的HttpURLConnection作为客户端RestTemplate restTemplate new RestTemplate(getClientHttpRequestFactory());// 设置拦截器restTemplate.setInterceptors(Collections.singletonList(restTemplateInterceptor()));return restTemplate;}/*** 使用httpclient作为底层客户端* return*/Beanpublic ClientHttpRequestFactory getClientHttpRequestFactory() {int timeout 50000;RequestConfig requestConfig RequestConfig.custom().setConnectTimeout(timeout).setConnectionRequestTimeout(timeout).setSocketTimeout(timeout).build();CloseableHttpClient httpClient HttpClientBuilder.create().setDefaultRequestConfig(requestConfig).build();return new HttpComponentsClientHttpRequestFactory(httpClient);}/*** 拦截器* return*/Beanpublic RestTemplateInterceptor restTemplateInterceptor() {return new RestTemplateInterceptor();}
}4、新增支持的媒体类型
RestTemplate 只支持application/json格式需要手动补充text/plan,text/html格式
package com.xiaobai.conf;import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.client.RestTemplate;import java.util.Arrays;
import java.util.Collections;/*** Author 王天文* Date 2024/12/29 18:06* Description: RestTemplate配置类*/
Configuration
public class RestTemplateConf {/*** 当指定类型Bean不存在时会创建一个新的Bean如果用户自定义了Bean,将使用用户自定义的Bean* return*/ConditionalOnMissingBean(RestTemplate.class)Beanpublic RestTemplate restTemplate() {// 使用JDK自带的HttpURLConnection作为客户端RestTemplate restTemplate new RestTemplate(getClientHttpRequestFactory());// 设置拦截器restTemplate.setInterceptors(Collections.singletonList(restTemplateInterceptor()));// 增加支持的媒体类型restTemplate.getMessageConverters().add(mappingJackson2HttpMessageConverter());return restTemplate;}/*** 使用httpclient作为底层客户端* return*/Beanpublic ClientHttpRequestFactory getClientHttpRequestFactory() {int timeout 50000;RequestConfig requestConfig RequestConfig.custom().setConnectTimeout(timeout).setConnectionRequestTimeout(timeout).setSocketTimeout(timeout).build();CloseableHttpClient httpClient HttpClientBuilder.create().setDefaultRequestConfig(requestConfig).build();return new HttpComponentsClientHttpRequestFactory(httpClient);}/*** 拦截器* return*/Beanpublic RestTemplateInterceptor restTemplateInterceptor() {return new RestTemplateInterceptor();}/*** 媒体类型* return*/Beanpublic MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {// RestTemplate 只支持application/json格式需要手动补充text/html格式MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter new MappingJackson2HttpMessageConverter();mappingJackson2HttpMessageConverter.setSupportedMediaTypes(Arrays.asList(MediaType.TEXT_PLAIN, MediaType.TEXT_HTML));return mappingJackson2HttpMessageConverter;}
}二、RestTemplate使用
1、RestTemplate注入 Autowiredprivate RestTemplate restTemplate;
2、无参数get请求测试
1Controller代码 GetMapping(value /getString)public String getString() {return 操作成功;}
2RestTemplate单元测试 Testpublic void testGetString() {ResponseEntityString responseEntity restTemplate.getForEntity(http://localhost:8090/getString, String.class);log.info(responseEntity.getBody());}
3、带参get请求测试
1Controller代码 GetMapping(/getRequestByParam)public MapString, Object getRequestByParam(RequestParam(name) String name) {log.info(名称 name);MapString, Object map new HashMap();map.put(responseData, 请求成功);return map;}
2RestTemplate单元测试 Testpublic void testParamGet() throws Exception {MapString, Object param new HashMap();param.put(name, 张三);ResponseEntityString responseEntity restTemplate.getForEntity(http://localhost:8090/getRequestByParam?name{name}, String.class, param);log.info(响应信息{}, responseEntity.getBody());}
4、带占位符参数的get请求测试
1Controller代码 GetMapping(/getRequestByPlaceHolder/{name}/{age})public MapString, Object getRequestByPlaceHolder(PathVariable(name) String name,PathVariable(age) String age) {log.info(名称 name);log.info(年龄 age);MapString, Object map new HashMap();map.put(responseData, 请求成功);return map;}
2RestTemplate单元测试 Testpublic void testPlaceholderGet() {ResponseEntityString responseEntity restTemplate.getForEntity(http://localhost:8090/getRequestByPlaceHolder/{1}/{2}, String.class, 张三, 25);log.info(响应信息{}, responseEntity.getBody());}
5、post请求测试
1Article实体类
package com.xiaobai.aroundtest.entity;import lombok.Data;import java.io.Serializable;/*** author wangtw* date 2023/12/6 0:35* description*/
Data
public class Article implements Serializable {private static final long serialVersionUID 1L;/*** 文章名称*/private String name;/*** 描述*/private String description;
}2Controller代码 PostMapping(/postRequest)public MapString, Object postRequest(RequestParam String name, RequestBody Article article) {log.info(名称 name);log.info(文章名称 article.getName());log.info(文章描述 article.getDescription());MapString, Object map new HashMap();map.put(responseData, 请求成功);return map;}
3RestTemplate单元测试 Testpublic void testPost() {// 表单数据MapString, Object formData new HashMap();formData.put(name, 解忧杂货店);formData.put(description, 这是一本好书);// 单独传参MapString, Object param new HashMap();param.put(name, 东野圭吾);// 请求调用HttpEntityMapString, Object formEntity new HttpEntity(formData);ResponseEntityString responseEntity restTemplate.postForEntity(http://localhost:8090/postRequest?name{name}, formEntity, String.class, param);log.info(响应信息{}, responseEntity.getBody());}
6、设置请求头
1Article实体类
package com.xiaobai.aroundtest.entity;import lombok.Data;import java.io.Serializable;/*** author wangtw* date 2023/12/6 0:35* description*/
Data
public class Article implements Serializable {private static final long serialVersionUID 1L;/*** 文章名称*/private String name;/*** 描述*/private String description;
}2Controller代码 PostMapping(/postRequestHeader)public MapString, Object postRequestHeader(HttpServletRequest request,RequestParam String name, RequestBody Article article) {String token request.getHeader(token);log.info(请求token token);log.info(名称 name);log.info(文章名称 article.getName());log.info(文章描述 article.getDescription());MapString, Object map new HashMap();map.put(responseData, 请求成功);return map;}
3RestTemplate单元测试 Testpublic void testPostHeader() {// 请求头HttpHeaders httpHeaders new HttpHeaders();httpHeaders.add(token, 123456);// 表单数据MapString, Object formData new HashMap();formData.put(name, 解忧杂货店);formData.put(description, 这是一本好书);// 单独传参MapString, Object param new HashMap();param.put(name, 东野圭吾);// 请求调用HttpEntityMapString, Object formEntity new HttpEntity(formData, httpHeaders);ResponseEntityString responseEntity restTemplate.postForEntity(http://localhost:8090/postRequestHeader?name{name}, formEntity, String.class, param);log.info(响应信息{}, responseEntity.getBody());}
7、上传文件
1Controller代码 PostMapping(/upload)public MapString, Object upload(RequestParam String name, MultipartFile uploadFile) throws IOException {log.info(名称 name);uploadFile.transferTo(new File(D:\\temp/ uploadFile.getOriginalFilename()));MapString, Object map new HashMap();map.put(responseData, 请求成功);return map;}
2RestTemplate单元测试 Testpublic void testUploadFile() {MultiValueMapString, Object param new LinkedMultiValueMap();param.add(uploadFile, new FileSystemResource(new File(D:\\christmas-tree.svg)));param.add(name, 张三);// 请求头设置HttpHeaders headers new HttpHeaders();headers.setContentType(MediaType.MULTIPART_FORM_DATA);// 请求调用HttpEntityMultiValueMapString, Object formEntity new HttpEntity(param, headers);ResponseEntityString responseEntity restTemplate.postForEntity(http://localhost:8090/upload, formEntity, String.class);log.info(响应信息{}, responseEntity.getBody());}
8、文件下载
1Controller代码 PostMapping(/download)public MapString, Object download(RequestParam String fileName,HttpServletResponse response) {log.info(文件名称 fileName);File file new File(D:\\temp/ fileName);try(FileInputStream fileInputStream new FileInputStream(file);ServletOutputStream outputStream response.getOutputStream()) {response.setHeader(content-disposition,attachment;fileName URLEncoder.encode(fileName,UTF-8));FileCopyUtils.copy(fileInputStream, outputStream);} catch (Exception e) {e.printStackTrace();}MapString, Object map new HashMap();map.put(responseData, 请求成功);return map;}
2RestTemplate单元测试 Testpublic void testDownloadFile() {MultiValueMapString, Object param new LinkedMultiValueMap();param.add(fileName, christmas-tree.svg);// 请求调用HttpEntityMultiValueMapString, Object formEntity new HttpEntity(param);ResponseEntitybyte[] responseEntity restTemplate.postForEntity(http://localhost:8090/download, formEntity, byte[].class);// 获取响应头HttpHeaders responseEntityHeaders responseEntity.getHeaders();SetMap.EntryString, ListString responseSet responseEntityHeaders.entrySet();for (Map.EntryString, ListString responseValue : responseSet) {log.info(响应头 responseValue.getKey() 响应内容 responseValue.getValue());}try {// 文件保存byte[] fileData responseEntity.getBody();FileCopyUtils.copy(fileData, new File(D:\\christmas-tree1.svg));} catch (IOException e) {e.printStackTrace();}}
三、参考 Spring之RestTemplate详解