Почему ErrorController не выбрасывает мой класс исключений? - PullRequest
2 голосов
/ 23 октября 2019

Одна из моих служб вызывает пользовательское исключение (SearchException). Исключение определяется как:

@ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR)
public class SearchException extends Exception {
    private static final long serialVersionUID = 1L;
}    

У меня затем ErrorController:

@Controller
public class TVFErrorController implements ErrorController  {


    private static final Logger log = LoggerFactory.getLogger(TVFErrorController.class);


    @RequestMapping("/error")
    public String handleError(HttpServletRequest request, Exception e) {
        //do something like logging
        Object status = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);
        if (status!=null){
            log.error("An error occured: status: "+status.toString());
        }
        if (e != null){
            log.error("Exception that occured: "+e.toString());
            e.printStackTrace();
        }
        return "error";
    }

    @Override
    public String getErrorPath() {
        return "/error";
    }
}

Большая часть этого работает, как и ожидалось, единственной проблемой является сообщение журнала, описывающее исключение в контроллеревсегда сообщает о java.lang.Exception, а не о SearchException.

1 Ответ

0 голосов
/ 24 октября 2019

Большая часть этого работает, как и ожидалось, единственная проблема - сообщение журнала, описывающее исключение в контроллере, всегда сообщает о java.lang.Exception, а не о моем SearchException.

Я полагаю, этопроисходит из-за того, что ваш обработчик ошибок стирает тип исключения с SearchException до Exception, когда получает его в:

public String handleError(HttpServletRequest request, Exception e)

Я думаю, вам нужно явно создать обработчик ошибок для вашегоSearchException

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...