Шаблон отдыха пройти оригинальное сообщение - PullRequest
1 голос
/ 21 сентября 2019

Я создаю (в основном) проход через API с RestTemplate, который запрашивает различные различные сервисы.При ошибках и пропущенных параметрах целевые API доставляют сообщения об ошибках, которые пропадают в ответах, и я хочу передать их через тот же HttpCode.Пример:

curl -XPOST sourceapi:/...

{"type":"/errors/failed","title":"Entity Exists","details":"Entity with name \"test\" already exists","status":409}

Если я делаю то же самое с RestTemplate, он выдает и Exception, и сообщение является нулевым, и это выглядит так:

curl -XPOST testapi:/...

409 null

Как я могу передать код ошибки и этот объект там "клиенту".(даже запись в журнал будет началом ...)

Я получил @ControllerAdvice класс, который уже кеширует его, но сообщение на самом деле просто 409 null

  @ExceptionHandler(value = {HttpClientErrorException.class})
  public ResponseEntity<Object> clientErrorException(HttpClientErrorException ex) {
    return ResponseEntity.status(ex.getStatusCode()).body(ex.getMessage());
  }

Есть лиспособ добавить ErrorParser или что-то еще при создании шаблона с RestTemplateBuilder?

1 Ответ

2 голосов
/ 21 сентября 2019

Не является ли getResponseBodyAsString() метод (унаследованный от RestClientResponseException) тем, что вы ищете?

  @ExceptionHandler(value = {HttpClientErrorException.class})
  public ResponseEntity<Object> clientErrorException(HttpClientErrorException ex) {
    return ResponseEntity.status(ex.getStatusCode()).body(ex.getResponseBodyAsString());
  }

Или, возможно, getResponseBodyAsByteArray() подойдет лучше.

...