У меня есть @RestController с методом:
@PostMapping
public ResponseEntity doSmth(@RequestBody String json){
...
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
RestTemplate restTemplate = new RestTemplate();
String url = "...";
HttpEntity<String> requestEntity = new HttpEntity<>("body", headers);
restTemplate.postForLocation(url, requestEntity);
....
}
Приложение я звоню работает следующим образом:
1. Возвращает ответсущность.
2. Если что-то пошло не так, то это выдает исключение.
Когда он выдает исключение, благодаря обработчик исключений он дает json в качестве ответа с информацией о проблеме.
Например, обработчик исключения для SomeException:
@RestController
@ControllerAdvice
public class SomeExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(SomeException.class)
public final ResponseEntity<ErrorDetails> handleUserNotFoundException(SomeException ex, WebRequest request) {
final HttpStatus status = HttpStatus.INTERNAL_SERVER_ERROR;
ErrorDetails errorDetails = new ErrorDetails(new Date(), status.value(), status.getReasonPhrase(), ex.getMessage(),
request.getDescription(false));
return new ResponseEntity<>(errorDetails, status);
ErrorDetails - просто POJO. Это необходимо для предоставления клиентам информации об исключении.
Когда приложение, которое я вызываю с помощью restTemplate, выдает исключение,
Я получаю Ошибка HttpServerError.
System.out.println(error); //org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 null
ПРОБЛЕМА:
Мне нужно знать, какое исключение было выбрано на другом сервере или с каким сообщением, но он дает такой ответ для любого исключения с любыми сообщениями.
ОБНОВИТЬ:
Почтальон на сервер:
1. Метод @PostMapping возвращает ResponseEntity с пустым телом и заголовком location (операция создания), поэтому клиент получает код состояния 201 CREATED и местоположение.
2. Если что-то пошло не так, клиент получает json, что обозначается ErrorDetails.
Сервер к серверу:
1. ResponseEntity responseEntity = restTemplate.postForObject(url,requestEntity, ResponseEntity.class); Работает, но даже когда пытаюсь использовать responseEntity.getHeaders() - не содержит localtion.
2. Когда сервер бросает SomeException extends RuntimeException со своим обработчиком - зависит от кода состояния, у меня есть исключение (HttpServerError for 5xx).
Когда я использую postForUrl, я получаю location, но, за исключением случаев, ситуация такая же.
Когда что-то пошло не так, мне нужно знать, что именно. На другом сервере могут быть разные исключения с разными сообщениями, на основном сервере ответ всегда HttpServerError. Мне нужно различать различные типы исключений после ответа restTemplate




я не понимаю проблемы