响应代码422转到onFailure方法。

问题描述 投票:2回答:1

我试图用 retrofit 发送一个注册请求,当创建用户成功时,它可以完美地工作。然而,当出现错误时,它会从 onResponseonFailure所以我不能处理我的服务器抛出的错误,他们都返回了一个 Json object 叫 "消息"。我用postman试了一下,响应正确,但是当我用android试做的时候,成功的消息没有任何问题,但是错误却没有显示,为什么会转到onFailure呢?我看到好几个题目都是用onResponse方法处理错误的,但是我的问题是当出现错误的时候根本没有调用这个方法,直接转到了onFailure。

我的Activity:

                    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");
                        }
                    });

RegisterService

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 $

java android json laravel retrofit2
1个回答
0
投票

好吧,我看了一下throwable,发现我设置的头是错的,它返回的是一个not-Json响应,所以我把头从

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

@Headers("Accept: application/json")
© www.soinside.com 2019 - 2024. All rights reserved.