【问题标题】:Response code 422 goes to onFailure method响应代码 422 转到 onFailure 方法
【发布时间】:2020-09-05 08:45:18
【问题描述】:

我正在尝试发送一个带有改造的注册请求,它在创建用户成功时完美运行。但是,当出现错误时,它会从onResponse 跳转到onFailure,所以我无法处理从我的服务器抛出的错误。他们都返回一个名为“消息”的Json object。我尝试使用邮递员,它响应正确,但是当我尝试使用 android 时,成功的消息显示没有任何问题,但没有错误。为什么会发生onFailure?我看到了几个主题,他们在 onResponse 方法上处理了错误,但我的问题是,当根本出现错误时没有调用该方法并直接转到 onFailure。

我的活动:

                    RegisterService registerService = BaseServerRetrofit.getRetrofitInstance().create(RegisterService.class);
                    RegisterCredential registerCredential = new RegisterCredential(username.getText().toString(),email.getText().toString()
                    ,password.getText().toString(),password.getText().toString());

                    Call<Message> call = registerService.getMessageFromServer(registerCredential);
                    call.enqueue(new Callback<Message>() {
                        @Override
                        public void onResponse(Call<Message> call, Response<Message> response) {
                            if(response.code() == 422)
                                Log.e("400",response.errorBody().toString());
                            reg_note.setText(response.body().getMessage());
                        }

                        @Override
                        public void onFailure(Call<Message> call, Throwable t) {
                            reg_note.setText("error");
                        }
                    });

注册服务

public interface RegisterService {
    String FEED = "/public/api/auth/signup";

    @Headers("Content-Type: application/json")
    @POST(FEED)
    Call<Message> getMessageFromServer(@Body RegisterCredential registerCredential);
}

不知道有没有必要告诉大家,成功时响应码是201,失败时是422。

编辑 1:

我发现异常:使用 JsonReader.setLenient(true) 在第 1 行第 1 列路径 $ 接受格式错误的 JSON

【问题讨论】:

  • 422 是一个错误响应代码,所以它应该算作失败
  • @apokryfos 其他主题询问了 422 响应代码,其他主题在 onResponse 方法中回答并获得了大约 60 票。我不知道。如果是这样,我应该如何得到 json 错误?
  • 我真的不知道改造是怎么做的,但我希望 422 算作失败。检查投掷物中的内容,以防有什么可以挽救的东西

标签: java android json laravel retrofit2


【解决方案1】:

对于遇到相同错误但想知道这不起作用的任何人,实际上,如果您要通过那里添加任何标头(例如令牌),则必须检查您的拦截器。

Request request = chain.request();
    Request newRequest;

    newRequest = request.newBuilder()
            .addHeader("Authorization", "token")
            .addHeader("Accept", "application/json")
            .build();

【讨论】:

  • 感谢它为我工作
【解决方案2】:

好吧,我查看了 throwable,发现我设置的标头是错误的,它返回的是非 Json 响应。所以我改变了标题

@Headers("Content-Type: application/json")

@Headers("Accept: application/json")

【讨论】:

    猜你喜欢
    • 2016-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 1970-01-01
    相关资源
    最近更新 更多