热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于OkHttp构建的RestTemplate

OKHttpOkHttp是轻量的Java网络请求框架。依赖com.squareup.okhttp3
OKHttp

OkHttp是轻量的 Java 网络请求框架。

依赖

<dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>3.14.9</version></dependency>

GET 同步、异步请求


POST表单请求


POSTJSON形式请求


文件上传下载

OkHttp使用详解

RestTemplate

传统情况下在java代码里访问restful服务&#xff0c;一般使用Apache的HttpClient。不过此种方法使用起来太过繁琐。spring提供了一种简单便捷的模板类来进行操作&#xff0c;这就是RestTemplate。

RestTemplate是Spring用于同步client端的核心类&#xff0c;简化了与http服务的通信&#xff0c;并满足Restful原则&#xff0c;程序代码可以给它提供URL&#xff0c;并提取结果。默认情况下&#xff0c;RestTemplate默认依赖jdk的HTTP连接工具。当然你也可以 通过setRequestFactory属性切换到不同的HTTP源&#xff0c;比如Apache HttpComponentsNettyOkHttp

RestTemplate介绍和使用

GET请求

在这里插入图片描述

getForObject方法


getForEntity方法

如果开发者需要获取响应头信息的话&#xff0c;那么就需要使用 getForEntity 来发送 HTTP 请求&#xff0c;此时返回的对象是一个 ResponseEntity 的实例。这个实例中包含了响应数据以及响应头。

POST请求

在这里插入图片描述

PUT请求

在这里插入图片描述

DELETE请求

在这里插入图片描述

exchange方法和execute方法

在这里插入图片描述
exchange和excute可以通用get、post、put、delete方法。

在内部&#xff0c;RestTemplate默认使用HttpMessageConverter实例将HTTP消息转换成POJO或者从POJO转换成HTTP消息。默认情况下会注册主mime类型的转换器&#xff0c;但也可以通过setMessageConverters注册其他的转换器。

源码

OKHttpProperties

package com.lsh.configurations;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;import java.util.concurrent.TimeUnit;
/*** &#64;author &#xff1a;LiuShihao* &#64;date &#xff1a;Created in 2020/12/18 9:38 上午* &#64;desc &#xff1a;okhttp相关配置信息*/
&#64;ConfigurationProperties(prefix &#61; "okhttp.config")
&#64;Data
public class OKHttpProperties {/*** Max Idle Connections*/private Integer maxIdleConnections &#61; 30;/*** 连接持续时间*/private Long keepAliveDuration &#61; 300L;/*** 复用时间单位*/private TimeUnit keepAliveDurationTimeUnit &#61; TimeUnit.MINUTES;/*** 连接超时时间*/private Long connectTimeout &#61; 10L;/*** 连接超时时间单位*/private TimeUnit connectTimeoutTimeUnit &#61; TimeUnit.SECONDS;/*** 写超时时间*/private Long writeTimeout &#61; 10L;/*** 写超时时间单位*/private TimeUnit writeTimeoutTimeUnit &#61; TimeUnit.SECONDS;/*** 读超时时间*/private Long readTimeout &#61; 10L;/*** 读超时时间单位*/private TimeUnit readTimeoutTimeUnit &#61; TimeUnit.SECONDS;/*** 线程配置*/private int corePoolSize &#61; Runtime.getRuntime().availableProcessors();/*** 最大线程数*/private int maxPoolSize &#61; Runtime.getRuntime().availableProcessors() * 4;}

RestTemplateConfig

package com.lsh.configurations;import lombok.extern.slf4j.Slf4j;
import okhttp3.ConnectionPool;
import okhttp3.OkHttpClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.OkHttp3ClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;/*** &#64;author &#xff1a;LiuShihao* &#64;date &#xff1a;Created in 2020/12/18 9:40 上午* &#64;desc &#xff1a;restTemplate配置*/
&#64;Configuration
&#64;EnableConfigurationProperties(OKHttpProperties.class)
&#64;Slf4j
public class RestTemplateConfig {&#64;Autowiredprivate OKHttpProperties okHttpProperties;/*** 声明 RestTemplate*/&#64;Beanpublic RestTemplate restTemplate() {ClientHttpRequestFactory factory &#61; httpRequestFactory();RestTemplate restTemplate &#61; new RestTemplate(factory);log.info("基于okhttp的RestTemplate构建完成&#xff01;");return restTemplate;}/*** 工厂* &#64;return*/private ClientHttpRequestFactory httpRequestFactory() {return new OkHttp3ClientHttpRequestFactory(okHttpConfigClient());}/*** 客户端* &#64;return*/private OkHttpClient okHttpConfigClient() {return new OkHttpClient().newBuilder().connectionPool(pool()).connectTimeout(okHttpProperties.getConnectTimeout(), okHttpProperties.getConnectTimeoutTimeUnit()).readTimeout(okHttpProperties.getReadTimeout(), okHttpProperties.getReadTimeoutTimeUnit()).writeTimeout(okHttpProperties.getWriteTimeout(), okHttpProperties.getWriteTimeoutTimeUnit()).hostnameVerifier((hostname, session) -> true).build();}/*** 连接池* &#64;return*/private ConnectionPool pool() {return new ConnectionPool(okHttpProperties.getMaxIdleConnections(), okHttpProperties.getKeepAliveDuration(), okHttpProperties.getKeepAliveDurationTimeUnit());}
}


推荐阅读
author-avatar
手浪用户穹谷之鹰
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有