Как получить сообщение или определенный тип исключения, работающий с RestTemplate и обработчиками исключений в Spring Boot Application - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть @ 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. Возвращает responseEntity .
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, но за исключением ситуации, такая же.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...