#java #spring #rest #retrofit2 #response
Вопрос:
Чтобы проверить свой обработчик ошибок, я пытаюсь создать синтетический ответ на ошибку и вернуть его. Я хочу вернуть ответ с кодом 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 дооснащения на API springframework на своей стороне сервера. Вместо retrofit2.Response<String>
того, чтобы я вернулся ResponseEntity<String>
:
@RequestMapping(value = "/syntheticError")
public ResponseEntity<String> responseError() {
return ResponseEntity.status(408).body("Some response from server");
}
Но если кто — нибудь знает и может объяснить, почему это произошло- я буду благодарен.