我试图用 retrofit 发送一个注册请求,当创建用户成功时,它可以完美地工作。然而,当出现错误时,它会从 onResponse
到 onFailure
所以我不能处理我的服务器抛出的错误,他们都返回了一个 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 $
好吧,我看了一下throwable,发现我设置的头是错的,它返回的是一个not-Json响应,所以我把头从
@Headers("Content-Type: application/json")
到
@Headers("Accept: application/json")