Retrofit2(Android)-如何通过POST方法发送表单数据

伊亚格·布雷汉(Iago Brayham)

* Ps:更改了有关安全事项的参考。

我正在尝试从服务器获取json,但是它需要在请求正文中使用form-data,如下所示: 在此处输入图片说明

在邮递员中进行测试时,它可以正常工作,但是我无法弄清楚如何使用Retrofit2做到这一点。

豆子:

public class Y {

@SerializedName("id")
private int yId;
@SerializedName("name")
private String yName;


//...
}


public class YList {

@SerializedName("ys")
private List<Y> ys;

//...
}

服务接口是这样的:

public interface YService {
@POST("y")
Call<YList> getY()

public static final YService serviceY = new Retrofit.Builder()
        .baseUrl("http://example.com.br/api/x/")
        .addConverterFactory(GsonConverterFactory.create())
        .build()
        .create(YService.class);
}

和REST方法:

YService yService = YService.serviceY;




    yService.getY().enqueue(new Callback<YList>() {
        @Override
        public void onResponse(Call<YList> call, Response<YList> response) {

            if (response.isSuccessful()) {
                //...
            } else {

                //...

            }

        }

        @Override
        public void onFailure(Call<YList> call, Throwable t) {

            //...

        }
    });'

邮递员JSON结果:

{
"auth": {
  "validation": true
},
"ys": [
{
  "id": 1,
  "name": "#"
}
]
}
伊亚格·布雷汉(Iago Brayham)

我设法找到一个解决方案,结果比我想象的要容易得多。

只需创建一个名为AuthRequest的类,如下所示:

public class AuthRequest {

    private static final String TAG = "Auth";
    private static final String EMAIL = "email";
    private static final String PASSWORD = "pass";


    //creates a json-format string
    public static String createAuthJsonString(){

        String info = "{\"auth\":{\"email\":\""+EMAIL+"\",\"password\":\""+PASSWORD+"\"}}";


        Log.i(TAG,info);

        return info;
    }

}

只需将@FormUrlEncoded添加到@Post并将@Field键和值放在方法调用中:

@FormUrlEncoded
@POST("ys")//endpoint
Call<YList> getY(@Field("info") String info);


// Connection url.
public static final YService serviceY = new Retrofit.Builder()
        .baseUrl("http://example.com.br/api/x/")
        .addConverterFactory(GsonConverterFactory.create())
        .build()
        .create(YService.class);

使用getY()方法:

    final YService yService = YService.serviceY;
    //...
    yService.getY(AuthRequest.createAuthJsonString()).enqueue(new 
        Callback<YList>() {

        @Override
        public void onResponse(Call<YList> call, Response<YList> response) {

            if (response.isSuccessful()) {
              //...

            } else {

               //...
            }
        }

        @Override
        public void onFailure(Call<YList> call, Throwable t) {

            //...

        }


    });



}

完美地从json返回了YList。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Retrofit2 Android中发送表单数据

如何通过Volley在Android中发送“多部分/表单数据” POST

如何在Retrofit2 Android中解析来自多部分表单数据请求的响应

Retrofit2:android POST参数和GET json数组

Android Retrofit2 POST调用未触发HTTP请求

Android Fragment中的Retrofit2如何正确实现?

Retrofit2发布表单数据适用于android 7,而不是android 5

通过 http retrofit2 请求发送 WAV 文件 - Android Studio

如何使用 Retrofit2 @POST

如何通过Android上的retrofit2调用具有Cognito凭据的API网关?

[RxJava]如何在Android RxJava上通过`retryWhen()`处理网络错误×retrofit2

使用 Retrofit2 发送复杂对象

如何在数组响应android retrofit2中获取特定的响应数据

如何使用retrofit2将json数据发布到android中的服务器?

如何在Android中使用Retrofit2将数据加载到RecyclerView中

如何在Kotlin Android上使用Retrofit2,RxJava2读取JSON文件

无法使用Retrofit2获取数据

AndroidStudio Retrofit2 响应获取数据

无法在Android中使用Retrofit2发出@Post请求

Android-使用类似于@SerializedName的注释Retrofit2 POST / PATCH请求正文

带有Retrofit2 OkHttp3的Android-多部分POST错误

Android Retrofit2:创建片段时如何读取和设置EditText值?

如何在Android上使用RxJava(+ Retrofit2)执行3个以上的并行HTTP请求

如何在Retrofit2 Android中动态重命名JSON响应的键

如何在Android Studio中使用Retrofit2获取JSON日志?

使用Retrofit2在POST请求中发送JSON

如何在kotlin中通过retrofit2获取json

如何在Android上使用Retrofit2和rxjava2发出多个请求?

如何测试Retrofit2 + RxJava2 API调用?