Skip to content

yu4158078/retrofit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 

Repository files navigation

retrofit demo

涉及技术

springboot + retrofit + swegger2

测试地址:http://localhost:8080/doc.html

Retrofit简介

Retrofit is a REST Client for Java and Android. It makes it relatively easy to retrieve and upload JSON (or other structured data) via a REST based webservice. In Retrofit you configure which converter is used for the data serialization. Typically for JSON you use GSon, but you can add custom converters to process XML or other protocols. Retrofit uses the OkHttp library for HTTP requests.

Retrofit是Java和Android的REST客户端。 它使通过基于REST的webService和JSON(或其他结构化数据)变得相对容易。 在Retrofit中,您可以配置用于数据序列化的转换器。 通常对于JSON使用GSon,但您可以添加自定义转换器来处理XML或其他协议。 Retrofit使用OkHttp库进行HTTP请求。

  • retrofit 更类似于 spring 的restTemplate 对已有网络请求libary 再次封装,更像是一种增强类似lombok

  • retrofit 基于okHttp ,这两个libary 都是Square Open Source 维护,对于已经使用okHttp的项目可以平滑迁移

  • retrofit 诞生的意义:把Url 和 http请求解耦、打散,针对接口编程、简化代码、增加易读性

OkHttp简介

OkHttp 是类似于 jdk HttpUrlConnection、apache httpclient 的网络http client libary,常见于安卓和java平台

支持httpClient 已有的特性,同步请求、异步回调请求、http2.0、https、自动重试等

retrofit的特性

  1. 支持多种反序列化工具:

    To convert to and from JSON:

     Gson: com.squareup.retrofit:converter-gson
    
     Jackson: com.squareup.retrofit:converter-jackson
    
     Moshi: com.squareup.retrofit:converter-moshi
    

    To convert to and from Protocol Buffers:

     Protobuf: com.squareup.retrofit:converter-protobuf
    
     Wire: com.squareup.retrofit:converter-wire
    

    To convert to and from XML:

     Simple XML: com.squareup.retrofit:converter-simplexml
    
  2. 支持自定义反序列化

  3. 支持请求适配器(java 平台暂时没用 ,andorid-RxJava)

  4. 解耦

为什么使用retrofit

  1. 基于接口编程,解耦,各个http请求之间无关联。修改影响小、容易扩展

  2. 基于目前平台的现状:都使用不同的http网络请求封装,可读性一般、不方便后期维护

Retrofit使用

maven依赖

    <dependency>
     <groupId>com.squareup.retrofit2</groupId>
     <artifactId>retrofit</artifactId>
     <version>2.5.0</version>
    </dependency>
    <dependency>
     <groupId>com.squareup.okhttp3</groupId>
     <artifactId>okhttp</artifactId>
     <version>3.14.1</version>
    </dependency>
    <dependency>
     <groupId>com.squareup.okhttp3</groupId>
     <artifactId>logging-interceptor</artifactId>
     <version>3.14.1</version>
    </dependency>
    <dependency>
     <groupId>com.squareup.retrofit2</groupId>
     <artifactId>converter-jackson</artifactId>
     <version>2.5.0</version>
    </dependency>

retrofit初始化

    // Retrofit 依赖okHttp 设置okHttp 参数
    
    OkHttpClient.Builder builder = new OkHttpClient.Builder();
    
    OkHttpClient okHttpClient = builder.addInterceptor(new TestInterceptor())
    
    .connectTimeout(connectTimeOut, TimeUnit.MILLISECONDS).readTimeout(readTimeOut, TimeUnit.MILLISECONDS)
    
    .addInterceptor(testInterceptor).addInterceptor(httpLoggingInterceptor).build();
    
    
    // 反序列化Convert
    
    ObjectMapper mapper = new ObjectMapper();
    
    // 过滤对象的null属性.
    
    mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
    
    // 实例化 Retrofit
    
    Retrofit retrofit = new Retrofit.Builder().baseUrl(basicUrl)
    
    .addConverterFactory(JacksonConverterFactory.create(mapper)).client(okHttpClient).build();

Retrofit 方法注解

注解代码 请求格式
@GET GET请求
@POST POST请求
@DELETE DELETE请求
@HEAD HEAD请求
@OPTIONS OPTIONS请求
@PATCH PATCH请求
@Headers Head 头信息

常用参数注解

注解 描述 使用 结果url
@Path restful 替换路径中{},和Spring @PathVariable一样 Java @GET("/server/get/{name}") Call<Map<String, Object>> get(@Path("name") String name); Content-Type: text/plain;charset=UTF-8 GET /server/get/name
@Query url中拼接参数 在?后 Java @POST("/server/query") Call<Map<String, Object>> query(@Query("name") String req); http://localhost:8080/server/query?name=111
@QueryMap: url中拼接参数 在?后 Java @POST("/server/queryMap") Call<Map<String, Object>> queryMap(@QueryMap Map<String, Object> req); /server/queryMap?a=111&b=222
@FormUrlEncoded @FieldMap @Field 用表单数据提交 @FieldMap form 多参数,@Filed 单参数 Java @FormUrlEncoded @POST("/server/form") Call<ResponseBody> form(@FieldMap Map<String, Object> req); Content-Type: application/x-www-form-urlencoded POST /server/form?key1=value1&key2=value2
@Multipart @Part @PartMap @Multipart 表示文件传输 和 @Part(单文件)、@PartMap(多文件) 搭配使用 Java @Multipart @POST("/server/upload") Call<ResponseBody> upload(@Part MultipartBody.Part body); 以流的方式传输文件
@Body post 请求中body 是json Java @POST("/server/post") Call<Map<String, Object>> header(@Body Map<String, Object> req); /server/post,body {"name":"yu"}
Java @POST("/server/mutil/{path}") Call<Map<String, Object>> mutil(@Path("path") String path, @Query("name") String req, @Body Map<String,Object> map); Content-Type: application/json; charset=UTF-8 POST http://localhost:8080/server/mutil/123?name=321 {"test":"123"}

相关资料:

retrofit官方地址

github地址

retrofit学习视频

okhttp官方地址

About

retrofit demo

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages