Unirest ошибки пересылки от бэкэнда к первоначальному потребителю - PullRequest
0 голосов
/ 16 марта 2020

Я пишу шлюз API в SpringBoot и недавно перешел на Unirest.

Интересно, есть ли способ:

  1. Пересылать случайные сообщения об ошибках бэкэнда без прерывания цепочки методов.
  2. Пересылать содержимое в случае успеха без необходимости "копаться" в теле ответа или разорвать цепочку.

Мое работающее в данный момент решение плохо читается, и его немного громоздко повторять для всех конечных точек, и я с ним поиграл в течение дня, поэтому я ценю любые идеи.

Конечная точка бэкэнда для тестирования сценария ошибки:

@GetMapping("/backend")
public List<String> backendErrorThrower() {
    throw new ResponseStatusException(HttpStatus.I_AM_A_TEAPOT, "no coffee for you");
}

Конечная точка шлюза API:

@GetMapping("/gateway")
    public List<?> gateway() {
        HttpResponse<JsonNode> response =
                Unirest.get("http://localhost:8080/backend")
                        .header("content-type", "application/json")
                        .asJson();

        // The section to be refactored:

        if(response.isSuccess()) {
            return response.getBody().getArray().toList();
        }
        throw new ResponseStatusException(HttpStatus.valueOf(response.getStatus()), response.getBody().getObject().getString("message"));
    }

Просто для справки, при вызове конечной точки шлюза, которая дополнительно вызывает конечную точку бэкэнда, ответ выглядит следующим образом:

GET http://localhost:8666/gateway

HTTP/1.1 418 Client Error (418)
Content-Type: application/json
Content-Length: 153

{
  "timestamp": "2020-03-15T21:45:29.766+0000",
  "path": "/gateway",
  "status": 418,
  "error": "I'm a teapot",
  "message": "no coffee for you",
  "requestId": "ccb8f381-1"
}
...