使用自定义类和 Call 时,Retrofit 返回状态 400

奥马尔·埃尔·赫夫尼

好的,我有一个返回包含两个字段的 json 的 API

  public interface AuthClient {
    @Headers({"Content-Type: application/json", "Accept: application/json", "deviceType: android"})
    @POST("api/v3.2/auth")
    Call<AuthResp> userLogin(@Body String body);
}

当我使用此 AuthResp 调用时,代表 json 响应改造的模型类给我错误代码 400 和错误消息 :: {"errors":"(not (map?a-java.lang.String))"}

    Gson gson = new GsonBuilder()
            .setLenient()
            .create();
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("http://172.16.10.196:3000/")
            .addConverterFactory(GsonConverterFactory.create(gson))
            .client(OkHttpClientProvider.getInstance().getClient())
            .build();
    String json1=new Gson().toJson(new User(8,"123456789"));
    Call<AuthResp> call=retrofit.create(AuthClient.class).userLogin(json1);
    call.enqueue(new Callback<AuthResp>() {
        @Override
        public void onResponse(Call<AuthResp> call, Response<AuthResp> response) {
            try {
                if(response.isSuccessful()) {
                    Log.d("Response Success","True");
                    Log.d("Response", response.body().refreshToken);
                }
                else{

                    Log.d("Response Not Success",response.code()+""+response.errorBody().string());
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        @Override
        public void onFailure(Call<AuthResp> call, Throwable t) {
            Log.d("Response","Failed" +t.getMessage());
        }
    });
}

我确信没有缺少标头或错误的参数,因为如果我使用 ResponseBody 进行调用,然后使用 Gson 将字符串转换为 AuthResp,它就像一个魅力。

使用的改装版本 ::

implementation 'com.squareup.retrofit2:retrofit:2.3.0'
implementation 'com.squareup.okhttp3:okhttp:3.9.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.+
implementation 'com.squareup.retrofit2:converter-scalars:2.+'
implementation 'com.squareup.retrofit2:converter-gson:2.+'

AuthResp 类

public class AuthResp {
    public String token;
    public String refreshToken;
    public AuthResp(){

    }
    public AuthResp(String token,String refreshToken){
        this.token=token;
        this.refreshToken=refreshToken;
    }
    public String getToken() {
        return token;
    }

    public void setToken(String token) {
        this.token = token;
    }

    public String getRefreshToken() {
        return refreshToken;
    }

    public void setRefreshToken(String refreshToken) {
        this.refreshToken = refreshToken;
    }

}

来自服务器的响应

 {
      "token": "some string",
      "refreshToken": "some string"
    }

谁能告诉我可能是什么问题?

后卫

添加标量转换器工厂

Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("http://172.16.10.196:3000/")
        .addConverterFactory(ScalarsConverterFactory.create())
        .addConverterFactory(GsonConverterFactory.create(gson))
        .client(OkHttpClientProvider.getInstance().getClient())
        .build();

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

http响应状态为400时,使用fetch api获取自定义错误消息

服务器返回状态码400时,使用Powershell检索响应内容

当请求访问令牌时,Retrofit + Instagram API返回错误400

找不到路径时如何返回状态码400

在JSON中获得400状态的Web服务时返回false

使用@requestBody时,发布请求返回400

使用 React Hook Form 获取时接收状态 400

使用Clarifai的FACE_DETECT_MODEL时的状态代码400

NSKeyedUnarchiver检索自定义类时返回nil

当我尝试在 WordPress 中上传 Ajax 文件时,admin-ajax 返回状态 400

当返回http状态代码400(错误请求)时,.Net HttpWebRequest.GetResponse()引发异常

为什么当 API 返回 400 HTTP 状态代码时 NodeJS 崩溃?

将用户重定向到自定义错误页面时返回404状态代码

使用服务 Android 时状态的自定义图标

当订单获得“完成”状态时使用自定义功能

使用自定义类时,c#/xml String.Contains 不能正确返回字符串

使用Doctrine ORM时如何自定义返回的数据?

在 Pentaho (PDI) 中使用 Call db 过程步骤时使用自定义数量的参数

与GCM通信时返回HTTP代码400

使用自定义钩子在 React 中的多个表中获取数据时自定义 ContextProvider 状态的问题

使用自定义类时找不到类

状态400和反序列化对象列表时出错。找不到默认构造函数

如何从第2轴Web服务(REST)返回自定义HTTP响应(400或401)?

当对象类型包括基元和自定义类时,避免使用ArrayList <object>?

使用自定义类设置 UICollectionView 数据源和委托时的错误消息

在动态crm的java请求中使用$filter参数时的400状态码

以角度处理400和401状态

发出自定义帖子请求时出现400错误的请求

未对400 Bad Request调用球衣自定义ExceptionMapper(验证失败时)