Как обработать Exception и вернуть правильный HTTP-код в Spring webflux? - PullRequest
0 голосов
/ 02 февраля 2019

У меня есть метод, который дает ответ, используя Mono.fromfuture (результат) и который выдает CustomException с 400 в качестве статуса.Теперь в моем классе обслуживания, когда я вызываю этот метод, ошибка и код, который я там выкладываю, не передаются моему клиенту (почтальону).Я вижу только сообщение.

Я получаю следующий формат: -

{
    "timestamp": "2019-02-01T11:13:32.748+0000",
    "path": "/some_url",
    "status": 500,
    "error": "Internal Server Error",
    "message": "Unable to fetch Response"
}

Ожидание (чего я хочу достичь): -

{
    "timestamp": "2019-02-01T11:13:32.748+0000",
    "path": "/some_url",
    "status": 400,                           // (my own status)
    "error": "INVALID_ARGUMENT",             // (my own error)
    "message": "Unable to fetch Response"
}

Мой код: -

public Mono<ResponseObject> fetchResponse(arg) {

   return Mono.just(somedata which will give exception)
      .flatMap(k -> callExternalService(k))
      .onErrorMap(e -> Mono.error(
            new BusinessException("Unable to fetch Response", e))

       */* e here is giving :-
        "code" : 400,
        "message" : "Request contains an invalid argument.",
        "status" : "INVALID_ARGUMENT" */*
}

1 Ответ

0 голосов
/ 03 февраля 2019

Вы смотрели документацию класса Response?

Вы можете создать Response самостоятельно, используя статические методы в документе, и отправить его вместо Mono.error в onErrorMap.

.верните что-то вроде ниже:

ServerResponse.ok().contentType(MediaType.APPLICATION_JSON).body(klass, Klass.class);

ServerResponse.status(status).build();//read doc and set for yourself

Вы также можете проверить эту ссылку .

...