0
私はスプリング5を使用してWebアプリケーションを作成しようとしています。それは他のマイクロサービスにはほとんど触れないマイクロサービスです。あるサービスからの応答は、他のサービスに依存しています。アプリケーションでグローバル例外ハンドリングを使用しています。ここでSpringリアクトルと従属応答でのグローバル例外処理
は私のコードです:エラーの場合には
@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()でスローされた例外は、グローバル例外ハンドラでは取り込まれません。
- 成功した場合は、内部サービスからの応答を返す必要があります。モノラルでの2つのメソッドを使用し