webflux 处理 WebFilter 抛出的异常
问题
都知道,如果要处理 Controller
中的全局异常, 可以通过 @ControllerAdvice
注解 实现 , 但是这个却不能处理 WebFilter中的异常
解决方案
@Component
@Order(-1)
public class FilterExceptionHandler implements ErrorWebExceptionHandler {
@Override
public Mono<Void> handle(ServerWebExchange exchange, Throwable ex) {
ServerHttpResponse response = exchange.getResponse();
response.setStatusCode(HttpStatus.OK);
ResultVo vo = ResultVo.error(ex.getMessage());
DataBuffer buff = response.bufferFactory()
.allocateBuffer().write(JSONUtil.toJsonStr(vo).getBytes());
//基于流形式
response.getHeaders().setContentType(MediaType.APPLICATION_STREAM_JSON);
return response.writeAndFlushWith(Mono.just(ByteBufMono.just(buff)));
}
}
good luck !