Retrofit2学习之四:POST请求

简介

Retrofit2 POST请求的请求参数支持Body、FormUrlEncoded、Multipart形式。

  • Body:Converter转换器支持的格式(如JSON)
  • FormUrlEncoded:Form表单形式
  • Multipart:支持文件提交

官方文档:http://square.github.io/retrofit/

POST请求

创建业务请求接口

public interface Api {

    /**
     * Body参数
     * @param user
     * @return
     */
    @POST("user/new")
    Call<ResponseResult> saveUser(@Body User user);

    /**
     * 表单参数
     * @param userId
     * @param userName
     * @return
     */
    @FormUrlEncoded
    @POST("user/edit")
    Call<ResponseResult> editUser(@Field("id") int userId, @Field("username") String userName);

}

创建一个Retrofit的实例,然后利用Retrofit实例创建接口对象和调用接口方法

public void postRequest(View view) {
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(SERVER_ADDRESS)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    api = retrofit.create(Api.class);

    User user = new User();
    user.setId(8);
    user.setUsername("AppBlog.CN");

    //api.saveUser(user).enqueue(new Callback<ResponseResult>() {
    api.editUser(8, "AppBlog.CN").enqueue(new Callback<ResponseResult>() {
        @Override
        public void onResponse(Call<ResponseResult> call, Response<ResponseResult> response) {
            //在UI主线程运行
            if (response.isSuccessful()) {
                Log.i(TAG, "返回成功");
                ResponseResult result = response.body();
                if (result != null) {
                    Toast.makeText(MainActivity.this, result.getMessage(), Toast.LENGTH_SHORT).show();
                }
            }
        }

        @Override
        public void onFailure(Call<ResponseResult> call, Throwable t) {
            Log.i(TAG, "请求失败: " + t.getLocalizedMessage());
        }
    });
}

依次调用 saveUsereditUser ,以 Body 和 Field 参数的形式发送 POST 请求,服务端接收的格式分别为JSON(通过GsonConverterFactory转换Body)和表单参数。

"POST /user/new HTTP/1.1" 200 -
{u'username': u'AppBlog.CN', u'id': 8}

"POST /user/edit HTTP/1.1" 200 -
id = 8
username = AppBlog.CN

版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/02/25/retrofit2-learning-4-post-request/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
海报
Retrofit2学习之四:POST请求
简介 Retrofit2 POST请求的请求参数支持Body、FormUrlEncoded、Multipart形式。 Body:Converter转换器支持的格式(如JSON) FormUrlEncoded:Form表单形式 M……
<<上一篇
下一篇>>
文章目录
关闭
目 录