У меня есть веб-служба, работающая на сервере A, которая возвращает пользовательское сообщение об ошибке в объекте Java ResponseEntity, например:
return new ResponseEntity<String>("My custom error message.", HttpStatus.BAD_REQUEST);
У меня есть другая веб-служба, работающая на сервере B, которая вызывает веб-службу нана сервере А, но вместо «Моего пользовательского сообщения об ошибке» я получаю следующее:
не может проанализировать JSON.Необработанный результат: сервер вернул код ответа HTTP: 400
Если я вызываю веб-службу непосредственно на сервере А, то получаю ошибку 400 с «Моим настраиваемым сообщением об ошибке», как и ожидалось.
Я изолировал проблему, когда сервер B пытается прочитать ответ от сервера A.
BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
Когда сервер B получает ошибку 400 от сервера A, conn.getInputStream () генерирует IOException, котороеперехватывается, но «Мое пользовательское сообщение об ошибке» теряется в исключении.
catch (IOException e) {
return new ResponseEntity<String>(e.getMessage(), HttpStatus.BAD_REQUEST);
}
Возможно ли для сервера B вернуть пользовательское сообщение об ошибке с сервера A?Как это можно сделать?
Я использую Java 8, Spring Boot 2.0.2, Tomcat 9 и Swagger UI 2.8 для тестирования веб-сервисов.
ОБНОВЛЕНИЕ: Если сервер А возвращает код200 вместо 400, тогда IOException не генерируется на сервере B. Вместо этого генерируется JsonParseException, и сервер B возвращает «Мое пользовательское сообщение об ошибке».