我在Spring web flux项目中工作,我使用了函数端点而不是控制器注解,但我没有找到处理同一端点的多个异常的解决方案,这是我的代码:
@Override
protected RouterFunction<ServerResponse> getRoutingFunction(ErrorAttributes errorAttributes) {
return RouterFunctions.route(RequestPredicates.GET("/router/users/{id}"),this::renderException);
}
private Mono<ServerResponse> renderException(ServerRequest request) {
Map<String, Object> error = this.getErrorAttributes(request, ErrorAttributeOptions.defaults());
error.remove("status");
error.remove("requestId");
return ServerResponse.status(HttpStatus.BAD_REQUEST).contentType(MediaType.APPLICATION_JSON)
.body(BodyInserters.fromValue(error));
}
对于端点/router/users/{id}
i触发UserNotFoundException和UserException,我想为UserNotFoundException返回404,为UserException返回500,但我不知道如何在功能端点中执行此操作。有人可以指导我如何以正确的方式执行此操作,就像我们在rest控制器中使用@ExceptionHandler时所做的那样?
1条答案
按热度按时间watbbzwu1#
如果您只关心返回正确的代码,那么为自定义异常添加
@ResponseStatus
可能是最好的解决方案。但是,如果您想自己构建
ServerResponse
,请使用项目React器操作符,如switchIfEmpty()
或onErrorMap()
等,它们可以按如下方式使用你可能想看看文档我需要哪个操作员?-处理错误