RestTemplate之exchange方法详解说明

乔欣 Spring 发布时间:2023-05-15 16:56:09 阅读数:10073 1
下文笔者讲述RestTemplate中exchange方法详解说明,如下所示

RestTemplate简介

RestTemplate是Spring提供的用于访问Http请求的客户端
RestTemplate提供了多种简洁的远程访问服务的方法

使用RestTemplate优势

RestTemplate相对于apache的HTTPClient类,RestTemplate使用非常简洁

RestTemplate

一.创建RestTemplate

@Configuration
public class RestTempleConfig {
    
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}
默认情况下RestTemplate自动注册一组HttpMessageConverter用来处理一些不同的contentType的请求
   当现有的转换器不能满足你的需求
    你还可实现org.springframework.http.converter.HttpMessageConverter接口自己写一个
/**
 * 替代默认的SimpleClientHttpRequestFactory
 * 设置超时时间重试次数
 * 同时设置一些拦截器以便监控
 * @return
 */
@Bean
public RestTemplate restTemplate() {
	//生成一个设置了连接超时时间、请求超时时间、异常重试次数3次
	RequestConfig config = RequestConfig.custom()
	             .setConnectionRequestTimeout(10000)
				 .setConnectTimeout(10000)
				 .setSocketTimeout(30000).build();
	HttpClientBuilder builder = HttpClientBuilder.create()
	              .setDefaultRequestConfig(config)
				  .setRetryHandler(new DefaultHttpRequestRetryHandler(3, false));
	HttpClient httpClient = builder.build();
	ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
	RestTemplate restTemplate = new RestTemplate(requestFactory);
	//做个日志拦截器;从性能上考虑,当前屏蔽该功能
	//restTemplate.setInterceptors(Collections.singletonlist(new RestTemplateConsumerLogger()));
	return restTemplate;
}
 

RestTemplate使用示例

 
getForObject:
   发送GET请求
    将HTTP response转换成一个指定的object对象
postForEntity:
   发送POST请求
    将给定的对象封装到HTTP请求体
     返回类型是一个HttpEntity对象

exchange和execute方法:
   上面列出的其它方法
     (如getForObject、postForEntity等)使用范围更广
   允许调用者指定HTTP请求的方法(GET、POST、PUT等)
     且可支持像HTTP PATCH

exchange方法的语法

exchange(String url, HttpMethod method,@Nullable HttpEntity<?> requestEntity, Class responseType, Map

参数说明:
	url:请求路径
	method:请求的方法(GET、POST、PUT等)
	requestEntity:HttpEntity对象,封装了请求头和请求体
	responseType:返回数据类型
	uriVariables:支持PathVariable类型的数据
例:RestTemplate之exchange示例
private String getId(String id) {
	String url = RemoteUrl + "/id";
	//设置Http的Header
	HttpHeaders headers = new HttpHeaders();
	headers.setContentType(MediaType.APPLICATION_JSON_UTF8);

	//设置访问参数
	HashMap<String, Object> params = new HashMap<>();
	params.put("name", name);
	
	//设置访问的Entity
	HttpEntity entity = new HttpEntity<>(params, headers);
	ResponseEntity<String> result = null;
	try {
		//发起一个POST请求
		result = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
		JSONObject data = JSONObject.parseObject(result.getBody()).getJSONObject("data");
		return data.getString("id");
	} catch (Exception e) {
		logger.error("获取id失败: " + e.getMessage());
	}
	return null;
}

exchange工具类编写

@Component
public class HttpUtil {

    private static Logger logger = LoggerFactory.getLogger(HttpUtil.class);

    @Resource
    private RestTemplate restTemplate;

    private static HttpUtil httpUtil;

    @PostConstruct
    public void init(){
        httpUtil = this;
        httpUtil.restTemplate = this.restTemplate;
    }

    public static <T> String httpRequest(String url, HttpMethod method, HttpEntity<T> entity){
        try {
            //发起一个POST请求
            ResponseEntity<String> result = httpUtil.restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
           return result.getBody();
        } catch (Exception e) {
            logger.error("请求失败: " + e.getMessage());
        }
        return null;
    }

}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/Spring/202305/6446.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者