为了测试我的错误处理程序,我尝试创建合成错误响应并返回它。我想用代码 4xy(例如 408)返回响应。这就是我在服务器端的做法:
@RequestMapping(value = "/syntheticError")
public Response<String> responseError() {
return Response.error(408, okhttp3.ResponseBody.create(MediaType.parse("text/plain"), "Hello from server"));
}
但在客户端我仍然看到响应代码 200。我的客户端:
private void makeRequest(Retrofit retrofit) {
WebService service = retrofit.create(WebService.class);
Call<String> call = service.callError();
try {
Response<String> response = call.execute();
System.out.println("Error code = " + response.code());
String responseBody = response.body();
System.out.println("Response body: " + responseBody);
} catch (Exception e) {
e.printStackTrace();
}
}
它给了我输出:
错误代码 = 200
响应正文:{“成功”:假}
所以它不成功,但响应代码仍然是 200。为什么在客户端我看不到我从服务器端发送的代码?
UPD
为了避免这个问题,我在服务器端将改造 API 更改为 springframework API。而不是retrofit2.Response<String>我返回ResponseEntity<String>:
@RequestMapping(value = "/syntheticError")
public ResponseEntity<String> responseError() {
return ResponseEntity.status(408).body("Some response from server");
}
但是,如果有人知道并且可以解释为什么会发生这种情况-我将不胜感激。