Spring Webflux ErrorHandling - @RestControllerAdvice с @ExceptionHandler или DefaultErrorAttributes? - PullRequest
0 голосов
/ 22 марта 2019

В Spring Webflux Каков предпочтительный способ обработки исключений?

@ RestControllerAdvice происходит из Spring MVC, тогда как DefaultErrorAttributes происходит из Spring Webflux.

Однако в SpringКто-нибудь может использовать @RestControllerAdvice.Каковы будут преимущества / недостатки?

@ RestControllerAdvice

@RestControllerAdvice
public class ControllerAdvice
{
    @ExceptionHandler(Throwable.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public Mono<Map<String, Object>> exceptions(Throwable e)
    {
        return Mono.just(Map.of("message", "bad"));
    }
}

Расширение DefaultErrorAttributes

@Component
public class ErrorAttributes extends DefaultErrorAttributes
{
    @Override
    public Map<String, Object> getErrorAttributes(ServerRequest request, boolean includeStackTrace)
    {
        var ex = getError(request);

        var attributes = new LinkedHashMap<String, Object>();
        attributes.put("status", HttpStatus.BAD_REQUEST.value());
        attributes.put("message", "bad");

        return attributes;
    }
}

Я хочучтобы оставаться в реактивном мире, поэтому я больше склоняюсь к DefaultErrorAttributes (который хорошо работает с DefaultErrorWebExceptionHandler в Webflux).Однако в @RestControllerAdvice я также мог использовать Mono.just (...).

...