响应代码 422 转到 onFailure 方法
Response code 422 goes to onFailure method
我正在尝试通过改造发送注册请求,并且在成功创建用户时它可以完美运行。但是,当出现错误时,它会从 onResponse
跳到 onFailure
,所以我无法处理从我的服务器抛出的错误。他们都 return 一个 Json object
叫 "message"。我尝试使用 postman 并且它响应正确,但是当我尝试使用 android 时,成功的消息显示没有任何问题但没有错误。为什么它会失败?我看到了几个主题,他们处理了 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");
}
});
注册服务
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) 接受格式错误的 JSON 在第 1 行第 1 列路径 $
嗯,我看了一下 throwable,发现我设置的 header 是错误的,它返回 not-Json 响应。所以我将 header 从
更改为
@Headers("Content-Type: application/json")
至
@Headers("Accept: application/json")
对于遇到同样错误但想知道这不起作用的任何人,实际上如果您要通过那里添加任何 header 像令牌一样,您必须检查您的拦截器。
Request request = chain.request();
Request newRequest;
newRequest = request.newBuilder()
.addHeader("Authorization", "token")
.addHeader("Accept", "application/json")
.build();
我正在尝试通过改造发送注册请求,并且在成功创建用户时它可以完美运行。但是,当出现错误时,它会从 onResponse
跳到 onFailure
,所以我无法处理从我的服务器抛出的错误。他们都 return 一个 Json object
叫 "message"。我尝试使用 postman 并且它响应正确,但是当我尝试使用 android 时,成功的消息显示没有任何问题但没有错误。为什么它会失败?我看到了几个主题,他们处理了 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");
}
});
注册服务
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) 接受格式错误的 JSON 在第 1 行第 1 列路径 $
嗯,我看了一下 throwable,发现我设置的 header 是错误的,它返回 not-Json 响应。所以我将 header 从
更改为@Headers("Content-Type: application/json")
至
@Headers("Accept: application/json")
对于遇到同样错误但想知道这不起作用的任何人,实际上如果您要通过那里添加任何 header 像令牌一样,您必须检查您的拦截器。
Request request = chain.request();
Request newRequest;
newRequest = request.newBuilder()
.addHeader("Authorization", "token")
.addHeader("Accept", "application/json")
.build();