Retrofit简单使用总结
前言
Retrofit是一个restful的http请求框架的封装,其网络请求并不是由retrofit去发送,而是由其内部封装的okhttp去处理。retrofit主要专注于对于接口的封装,而OkHttp专注于网络请求的发送以及请求发送的高效
应用使用retrofit发送请求时的流程如上,应用通过retrofit对请求接口进行封装,retrofit再去调用其内部封装的OkHttp进行请求的发送,接受请求也是由OkHttp去呈递给Retrofit,最终展示给应用。
其在github上的介绍也很简单:
适用于安卓和java简单而安全的http客户端,引入依赖使用gradle:com.squareup.retrofit2:retrofit:2.9.0,要求JDK1.8及以上或者安卓api21及以上
简单使用
-
依赖引入
<dependency> <groupId>com.squareup.retrofit2</groupId> <artifactId>retrofit</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>5.7.1</version> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>com.squareup.retrofit2</groupId> <artifactId>converter-gson</artifactId> <version>2.0.2</version> </dependency>
可以看到,对maven添加了三个依赖,retrofit,junit,和converter-gson,junit为单元测试,主要用于对retrogfit测试程序,converter-gson是适用于retrofit引擎的json格式转换,可以将返回的数据转为json数据。
tips:由于官方使用的依赖是gradle,因而网络上大部分资料关于converter-gson的引入都是gradle,因此在这里简单提一下其与maven之间形式上的区别;
例如:gradle:
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
对应的maven
<dependency> <groupId>com.squareup.retrofit2</groupId> <artifactId>retrofit</artifactId> <version>2.9.0</version> </dependency>
可以看到,在引用方式上,gradle对于groupId,artifactId和版本都有要求,之间以冒号间隔,maven就显得很清晰
所以两者之间的依赖迁移只需匹配对应的规则即可。
-
接口定义
public interface retrofitClient { @GET("getPerson") Call<List<person>> userList(); }
get注解为请求方式和路径,参数的定义可以再方法的参数里去加,使用@Path注解
Call接口使得之后创建的service的每个调用都可以想远程服务器发送同步或者异步请求
-
service创建
public Retrofit retrofit; public retrofitClient getRetrofit(){ retrofit = new Retrofit.Builder() .baseUrl("http://localhost:8080/") .addConverterFactory(GsonConverterFactory.create()) .build(); retrofitClient retrofitClient = retrofit.create(retrofitClient.class); return retrofitClient; }
使用Retrofit对象的Builder方法去创建retrofit实例,之中可以添加一些基本属性,baseUrl为要请求的基本路径,addConverFactory指定返回数据使用的解析器,build方法创建Retrofit对象。
create后跟接口类的class对象
-
简单测试
@Test public void getPerson(){ retrofitUtil retrofitUtil = new retrofitUtil(); retrofitClient retrofit = retrofitUtil.getRetrofit(); System.out.println(retrofit.userList()); }
这一部分使用retrofit对象去发送请求,并打印返回的值。要注意的是,由于retrofit对象将gson封装好了,因而请求的参数和response都变得不可见,想要看到返回值的具体值可以添加拦截器去处理,这里只能简单测试是否可以发送并接受。
还有,baseurl里的路径后要加‘/’,之前创建的接口里最前边不要加’/‘。
-
结果展示
错误总结
在创建时需要加入格式解析器:.addConverterFactory(GsonConverterFactory.create())
junit依赖错误,springboot创建模板里的test
并不是完整的junit,在引入junit4依赖后问题解决。