Skip to content

chentao7v/RetrofitConveter

Repository files navigation

将普通的 Java Bean 转换为 Retrofit Form 的转换器。

使用方法

  1. 构建 Retrofit 对象时,添加对应的转换器。

    new Retrofit.Builder()
       .client(okHttpClient)
       .addConverterFactory(FormBodyConverterFactory.create())
       .baseUrl("...")
       .build();
  2. 定义一个请求对象类作为请求参数的接收者,并给其添加上 @AsFormBody 的注解,如:

    @AsFormBody
    public class TestRequest {
      @SerializedName("serialized_key1")
      private String key1;
      private String key2;
      //...
    }
  3. 定义 api service,POST 请求接收的入参为对应请求对象,如 @Body TestRequest

    public interface TestApi {
      
      @POST("test/post")
      Call<ResponseBody> testPost(@Body TestRequest request);
      
    }
  4. 发起请求,所有请求对象上的参数值【toString() 方法的值】都会被当做表单项提交到服务器。

    public void test() {
      TestRequest req = new TestRequest();
      req.setKey1("value1");
      req.setKey2("value2");
      // ...
      Call<ResponseBody> call = testAPi.testPost(req);
      // ...
    }

    提交的数据:

    --> POST https://m.baidu.com/test/post
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 41
    serialized_key1=value1&key2=value2
    --> END POST (168-byte body)

高级用法

  1. 对于请求对象中的成员变量,如果未加 @SerializedName 的注解,则其变量名将会作为表单的 key 被提交到服务器。针对可能存在的代码混淆的情况,建议所有成员都加上该注解,否则可能出现 a=value1 的情况。

  2. 针对不需要将 Java Bean 中的静态字段作为请求入参的场景,请给 @AsFromBody 注解添加对应属性:

    @AsFormBody(ignoreStaticFields = true) // 该属性默认为 true
  3. 如果请求对象 A 中内嵌了一个成员 B,想把 B 对象中的所有成员也作为表单项提交到服务器,则需要给 B 成员添加 @FlatMembers 注解:

    public class A {
      
      private String keyA1;
      
      @FlatMembers
      private B b;
      
      // ...
    }
    
    public class B {
      
      private String keyB1;
    
      @SerializedName("SerializedName_Key_B2")
      private boolean keyB2;
      
    }

    最终所有的入参都会被提交到服务器。

    --> POST https://m.baidu.com/test/post
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 83
    keyA1=valueA1&keyB1=valueB1&SerializedName_Key_B2=valueB2
    --> END POST (168-byte body)

About

Retrofit 中将 Bean 转换为表单

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published