【发布时间】:2018-04-12 18:51:05
【问题描述】:
我正在尝试使用 spring 5 创建一个 Web 应用程序。这是一个微服务,几乎没有其他微服务。一个服务的响应依赖于另一个。我在我的应用程序中使用全局异常处理。
这是我的代码:
@Override
public Mono<Response> checkAvailablity(Request request) {
Mono<Response> authResponse = userService.authenticateToken(request);
return authResponse.doOnSuccess(t -> {
// if success is returned.
// Want to return this innerResponse
Mono<Response> innerResponse =
httpService.sendRequest(Constant.SER_BOOKING_SERVICE_CHECK_AVAILABILTY,
request.toString(), Response.class);
}).doOnError(t -> {
logger.info("Subscribing mono in Booking service - On Error");
Mono.error(new CustomException(Constant.EX_MODULE_CONNECTION_TIMED_OUT));
});
如果出现错误,我想抛出 CustomException 并在全局异常处理程序中捕获它:
@ControllerAdvice
public class ExceptionInterceptor {
public static Logger logger = Logger.getLogger(ExceptionInterceptor.class);
@ExceptionHandler(value = CustomException.class)
@ResponseBody
public Response authenticationFailure(ServerHttpRequest httpRequest, ServerHttpResponse response,
CustomException ex) {
logger.info("CustomException Occured with code => " + ex.getMessage());
return buildErrorResponse(ex.getMessage());
}
基于上面的代码我有两个问题:
- 在 Mono.error() 中抛出的异常未在全局异常处理程序中捕获。
- 如果成功,应该返回来自内部服务的响应。
【问题讨论】:
标签: spring spring-boot