Есть ли в JAX-RS ExceptionMapper для поддержки Spring-MVC 3 REST? - PullRequest
0 голосов
/ 11 декабря 2011

Я хотел бы обработать мои исключения на глобальном уровне, но, похоже, Spring MVC предоставляет способ обработки исключений только на уровне контроллера с помощью аннотации @ExceptionHandler (для поддержки REST с аннотацией @ResponseBody), которая не учитываетПринцип СУХОГО.

Я прочитал документацию JAX-RS и нашел ExceptionMapper как идеальный ответ на мою потребность ... но мне нужен эквивалент Spring MVC 3.

Есть ли решение?

Спасибо.

1 Ответ

0 голосов
/ 17 декабря 2011

Я наконец нашел ответ, выполнив поиск в Spring Javadoc.

Фактически, мне пришлось переопределить DefaultHandlerExceptionResolver.

Затем вы должны объявить свой новый ExceptionResolver в контексте вашего веб-приложения.

Итак, когда в вашем контроллере вы бросаете MyNewException1, Spring MVC может его обработать.

 @Override
protected ModelAndView doResolveException(HttpServletRequest request,
        HttpServletResponse response, Object handler, Exception ex) {

    try {
        if (ex instanceof MyNewException1) {
            return handleMyNewException1((MyNewException1) ex, request, response,
                    handler);
        }
        else if (ex instanceof MyNewException2) {
            return handleMyNewException2((MyNewException2) ex, request,
                    response, handler);
        }
    } catch (IOException handlerException) {
        logger.warn("Handling of [" + ex.getClass().getName() + "] resulted in Exception", handlerException);
        return null;
    } 

    return super.doResolveException(request, response, handler, ex);
} 

protected ModelAndView handleMyNewException1(MyNewException1 ex,
        HttpServletRequest request, HttpServletResponse response,
        Object handler) throws IOException {
            //For example send a bad request code error
    response.sendError(HttpServletResponse.SC_BAD_REQUEST, ex.getMessage());
    return new ModelAndView();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...