Я работаю с пружинной загрузкой и только начал внедрять обработку исключений. Но иногда мне нужно обрабатывать одно и то же исключение из разных контекстов. Иногда исключение 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:/");
}
}
Как я могу заставить работать выше? Я подошел к этому неправильно или просто сделал это неправильно?
Заранее спасибо.