Захват настраиваемого объекта в AbstractErrorWebExceptionHandler webflux - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь создать 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 есть другой способ справиться с подобными ситуациями?

...