0

为了测试我的错误处理程序,我尝试创建合成错误响应并返回它。我想用代码 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");
}

但是,如果有人知道并且可以解释为什么会发生这种情况-我将不胜感激。

4

0 回答 0