2013-07-06 2 views
1

Я использую аннотацию @ControllerAdvice для определения исключений на уровне приложения. Теперь проблема в том, что у меня есть два класса @ControllerAdvice, один для REST и один для обычного веб-приложения. Когда я определяю @ExceptionHandler для Exception.class в обоих, рассматривается только первый. Как отделить оба? Или как я могу поймать Исключение и определить, откуда оно произошло? Есть ли способ, или же мне нужно использовать обработчики исключений, специфичные для контроллера?Обработка исключений в Spring MVC вместе с Rest API

ответ

0

Я решил эту проблему, создав пользовательские исключения для своего приложения и предоставив один метод обработчика исключений для каждого из них с помощью обработчика @exception.

Я также использовал аспекты, чтобы убедиться, что каждое исключение преобразуется в любое из пользовательских исключений.

@Aspect 
@Component 
public class ExceptionInterceptor { 

    @AfterThrowing(pointcut = "within(x.y.package..*)", throwing = "t") 
    public void toRuntimeException(Throwable t) 
      throws ApplicationException1, ApplicationException2,ApplicationException3 { 
     if (t instanceof ApplicationException1) { 

      throw (ApplicationException1) t; 
     } else if (t instanceof ApplicationException2) { 

      throw (ApplicationException2) t; 
     } else 
      throw (ApplicationException3) t; 
     } 
} 

Они передадут управление в @controlleradvice.

+0

Не могли бы вы объяснить немного больше, что вы здесь делаете? Как это передать управление одному из ваших классов ControllerAdvice? –

-1

Я заметил, что это осталось на месяц или около того, поэтому он может быть старым. Но эта статья может помочь http://www.baeldung.com/2013/01/31/exception-handling-for-rest-with-spring-3-2/.

Раздел 3.5, вероятно, является тем, что вы ищете, настраиваемым Резолютором Исключения.

+0

Благодарим вас за ответ, но я решил его использовать аспекты, чтобы все исключения были выброшены в одно место. –

+0

Я думаю, что это не объясняет, как выполнять обработку исключений для API REST и HTML-страниц в том же приложении Spring. -1 –