retrofit 发起form data请求时使用自定义对象参数

0 条评论

Retrofit 在发起 form data 请求时,接口的定义在只能把所有的参数都挨个列出来,用 @Field 进行修饰,但是在参数较多时,显然不现实,过多参数不符合编程规范的。还有一种方式是使用 @FieldMap 注解,此时参数必须是 Map,这样一来就丧失了静态检查的好处,毕竟 retrofit 的一大优势就是使用定义好的接口来代理 http 请求。

理想中当然是可以把 form data 的各个参数定义成对象的字段,于是基于 retrofit 原本的机制扩展了一个 @FormBody 注解,然后用 Converter 来处理 @FormBody 修饰的参数,使用方法如下,:

首先定义接口服务时,给参数加上 @FormBody 以及 @Body 注解

public interface AccountService {

    @POST("/accounts")
    Call addAccountInfo(@Body @FormBody AccountInfo accountInfo);
}

然后创建 Retrofit 时,添加对应的 Convertor

Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("http://127.0.0.1:8080/")
        .addConverterFactory(new FormBodyConverterFactory())
        .addConverterFactory(GsonConverterFactory.create())
        .build();

项目地址: https://github.com/qiyi/retrofit-form 

相关日志 Relate Posts

收藏与分享 : Twitter | Facebook | 微博 | 人人 | Google+ | PDF

发表留言(Ctrl+Enter提交)