Обработка исключений для типа ответа ResponseEntity и ModelAndView - PullRequest
0 голосов
/ 27 марта 2020

Я работаю с пружинной загрузкой и только начал внедрять обработку исключений. Но иногда мне нужно обрабатывать одно и то же исключение из разных контекстов. Иногда исключение EntityNotFoundException (например,) генерируется при переходе на новую страницу (поэтому ExceptionHandler должен возвращать ModelAndView с перенаправленным местоположением), а в других случаях то же исключение будет проходить через вызов REST (и ExceptionHandler должен возвращать ResponseEntity с соответствующим телом).

Ниже приведен совет контроллера, который я создал для визуализации того, что я пытаюсь сделать. Я ЗНАЮ, что это работает, и что @ExceptionHandler, который обрабатывает бросаемое, поймает все. Но, как вы увидите, один обработчик возвращает ResponseEntity, а другой возвращает ModelAndView.

@ControllerAdvice
public class GeneralControllerAdvice {
  private static final Logger LOG = LoggerFactory.getLogger(GeneralControllerAdvice.class);

  private final ExceptionToStatusCodeMapping exceptionToStatusCodeMapping;

  @Autowired
  public GeneralControllerAdvice(ExceptionToStatusCodeMapping exceptionToStatusCodeMapping) {
      this.exceptionToStatusCodeMapping = exceptionToStatusCodeMapping;
  }

  @ExceptionHandler(Throwable.class)
  @ResponseBody
  public ResponseEntity<String> handleThrowable(final Throwable ex) {
    LOG.debug("Handling throwable: {}", ex.getMessage());
    return new ResponseEntity<>(ex.getMessage(), exceptionToStatusCodeMapping.getStatusForException(ex));
  }

  @ExceptionHandler({ Exception.class })
  public ModelAndView handleException(Exception ex, RedirectAttributes redirectAttributes) {
    LOG.debug("Handling Exception: {}", ex.getMessage());

    redirectAttributes.addFlashAttribute("error", ex.getMessage());

    return new ModelAndView("redirect:/");
  }
}

Как я могу заставить работать выше? Я подошел к этому неправильно или просто сделал это неправильно?

Заранее спасибо.

...