Spring 3 - создает ExceptionHandler для NoSuchRequestHandlingMethodException

На основе ссылки MDN (около дна) Safari еще не поддерживает эту функцию.

28
задан sgsweb 12 July 2010 в 16:43
поделиться

2 ответа

@ExceptionHandler-аннотированные методы вызываются, когда метод @RequestMapping того же класса выбрасывает исключение. Поэтому, когда вы добавили отображение, которое вызвало NullPointerException, это сработало, поскольку отображенный метод и обработчик исключения находились в одном классе.

Когда отображение не найдено, Spring не имеет возможности связать NoSuchRequestHandlingMethodException с вашим @ExceptionHandler, поскольку он не дошел до сопоставления запроса с методом обработчика. Это не упоминается в документации в явном виде, но я наблюдал именно такое поведение.

Если вы хотите специально обработать это исключение, вам придется использовать более общий подход HandlerExceptionResolver, а не более специализированный @ExceptionHandler.

41
ответ дан 28 November 2019 в 03:00
поделиться

В Spring 3.2 вы можете использовать @ContollerAdvice , чтобы иметь ExceptionHandler для всех ваших контроллеров, например:

@ControllerAdvice
public class GeneralHandler {

   @ExceptionHandler
   public ModelAndView handleException (NoSuchRequestHandlingMethodException ex) {
        ModelAndView mav = new ModelAndView();
        ...
        return mav;
   }
}

Вы можете даже добавить больше аннотаций для возврата сериализованного json

@ExceptionHandler
    @ResponseBody
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public RestError resolveBindingException ( MethodArgumentNotValidException methodArgumentNotValidException, Locale locale )
    {
        BindingResult bindingResult = methodArgumentNotValidException.getBindingResult();
        return getRestError(bindingResult, locale);
    }
16
ответ дан Janning 28 November 2019 в 03:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: