响应代码 422 转到 onFailure 方法



>我正在尝试发送带有改装的注册请求,并且在成功创建用户时它可以完美运行。 但是,当出现错误时,它会从onResponse跳到onFailure,所以我无法处理从服务器抛出的错误。 它们都返回一个名为"消息"的Json object。我尝试使用邮递员,它响应正确,但是当我尝试使用 android 执行此操作时,会显示成功消息,没有任何问题,但没有错误。为什么会失败?我看到了几个主题,他们处理了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 $

好吧,我查看了可抛出的标头,发现我设置的标头是错误的,并且它返回了一个非 Json 响应。 所以我将标题从

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

@Headers("Accept: application/json")

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

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

最新更新