Java Веб-приложение Spring Boot: обработка исключения 404 - PullRequest
0 голосов
/ 20 июня 2020

Я просматриваю Java учебник Spring Boot и пытаюсь обработать исключения 404. У меня есть точный код, как в учебнике, но он по какой-то причине не работает, хотя ошибка 403 работает. В этом руководстве инструктор обрабатывает все невыполненные исключения следующим образом, в частности defaultErrorHandler (). Однако это не работает:

@ControllerAdvice
public class GlobalExceptionHandler {

    @Value("${message.error.exception}")
    private String exceptionMessage;

    @Value("${message.error.duplicate.user}")
    private String duplicateUserMessage;

    @ExceptionHandler(value=Exception.class)
    public ModelAndView defaultErrorHandler(HttpServletRequest req, Exception e) {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.getModel().put("message", exceptionMessage);
        modelAndView.getModel().put("url", req.getRequestURL());
        modelAndView.getModel().put("exception", e);
        modelAndView.setViewName("app.exception");
        return modelAndView;
    }

    @ExceptionHandler(value=DataIntegrityViolationException.class)
    public ModelAndView duplicateUserHandler(HttpServletRequest req, Exception e) {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.getModel().put("message", duplicateUserMessage);
        modelAndView.getModel().put("url", req.getRequestURL());
        modelAndView.getModel().put("exception", e);
        modelAndView.setViewName("app.exception");
        return modelAndView;
    }
}

Затем я попытался добавить что-то похожее на то, что есть у инструктора для обработки ошибок 403, найденное ниже, но это тоже не работает:

    @RequestMapping("/403")
    ModelAndView accessDenied(ModelAndView modelAndView) {
        System.out.println("We're here");
        modelAndView.getModel().put("message", accessDeniedMessage);
        modelAndView.setViewName("app.message");
        return modelAndView;

    }

    @RequestMapping("/404")
    ModelAndView pageNotFound(ModelAndView modelAndView) {

        modelAndView.getModel().put("message", exceptionMessage);
        modelAndView.setViewName("app.message");
        return modelAndView;

    }

Я попытался выполнить отладку, поместив System.out.println ("test") в каждый из подозрительных методов, но ни один из них не был реализован. Любая помощь будет оценена. Спасибо!

1 Ответ

0 голосов
/ 20 июня 2020

Если вы хотите обработать исключение 404, чтобы отображать свою пользовательскую страницу, а не белую ошибку. Вы можете сделать это, создав папку с именем error в каталоге ресурсов. В папке ошибок создайте файл 404. html и добавьте код html, стиль , и т.д. c. Теперь Spring Boot выбирает ваш файл 404. html и отображается для пользователя всякий раз, когда возникает ошибка 404. Подобным образом вы также можете обрабатывать любые ошибки, просто помещая имя файла с кодом ошибки 501. html, 407. html et c

...