Я пытаюсь создать GlobalExceptionHandler, который расширяет AbstractErrorWebExceptionHandler
. У меня есть собственные классы исключений, которые расширяют RuntimeException
. Когда я генерирую исключение, я создаю настраиваемый объект, который мне нужен в GlobalExceptionHandler для регистрации и возврата настраиваемого json.
Я привык к способу обработки исключений MVC, а webflux для меня в новинку.
public class GlobalErrorWebExceptionHandler extends AbstractErrorWebExceptionHandler {
public GlobalErrorWebExceptionHandler(ErrorAttributes errorAttributes, ResourceProperties resourceProperties, ApplicationContext applicationContext, ServerCodecConfigurer configurer) {
super(errorAttributes, resourceProperties, applicationContext);
this.setMessageWriters(configurer.getWriters());
}
@Override
protected RouterFunction < ServerResponse > getRoutingFunction(ErrorAttributes errorAttributes) {
// code here gets executed but I do not have access to custom objects I build when throwing exception.
return ...
}
// This code does not get executed.
@ExceptionHandler(CustomException.class)
public Mono < ServerResponse > customException(CustomException ex) {
// ex contains custom attributes I have created which needs to be logger here and returned
// use ex here to build and return custom json.
return ...;
}
Когда я генерирую исключение, я создаю настраиваемый объект и надеялся, что глобальный обработчик исключений будет содержать этот объект.
if(error){
CustomExceptionObject o = CustomExceptionObject.builder()...build();
throw new CustomException( o ); // i need to access this in the exception handler.
}
Это правильный способ обработки исключений или у webflux есть другой способ справиться с подобными ситуациями?