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 HttpComponents、Netty和OkHttp
。
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;ConfigurationProperties(prefix &#61; "okhttp.config")
&#64;Data
public class OKHttpProperties {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;Configuration
&#64;EnableConfigurationProperties(OKHttpProperties.class)
&#64;Slf4j
public class RestTemplateConfig {&#64;Autowiredprivate OKHttpProperties okHttpProperties;&#64;Beanpublic RestTemplate restTemplate() {ClientHttpRequestFactory factory &#61; httpRequestFactory();RestTemplate restTemplate &#61; new RestTemplate(factory);log.info("基于okhttp的RestTemplate构建完成&#xff01;");return restTemplate;}private ClientHttpRequestFactory httpRequestFactory() {return new OkHttp3ClientHttpRequestFactory(okHttpConfigClient());}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();}private ConnectionPool pool() {return new ConnectionPool(okHttpProperties.getMaxIdleConnections(), okHttpProperties.getKeepAliveDuration(), okHttpProperties.getKeepAliveDurationTimeUnit());}
}