Как обрабатывать бизнес-исключения из уровня обслуживания в стойках 2 только в одном месте

Я работаю с приложением, включающим Struts2 на веб-уровне и Spring на бизнес-уровне. У меня также есть класс BusinessException, который будет использоваться всеми бизнес-сервисами для создания связанных с бизнесом сбоев валидации, которые должны доходить до веб-уровня и должны отображаться пользователям в качестве сообщения (й) валидации. Я легко могу сделать это, написав в своем классе действий:

      ClientAction extends ActionSupport throws Exception{
         ....
        try{
            clientService.searchClient();
        }catch(InvalidClientSearchCriteriaException e){
              addActionMessage("Invlid Search Criteria");
        }
        ...

И подобный код в каждом классе действий. Однако я не хочу загрязнять свои уроки действия блокировками try catch. Вместо этого было бы намного лучше, если бы я мог написать блок try catch в одном месте и перехватить все исключения там как BusinessExceptions и создать сообщения / ошибки из встроенных сообщений / ошибок в этих исключениях. Один из подходов, который я мог придумать, состоял в том, чтобы использовать перехватчик или прослушиватель preresult. Но я не могу использовать перехватчик, как показано ниже, который ловит BusinessExceptions, выброшенных из классов действий...

    ExceptionInterceptor extends AbstractInterceptor(ActionInvocation ivocation,...){              
          try{
                    invocation.invoke();
          }catch(Exception e){
              if(e instanceof BusinessException){
                   ActionSupport as = (ActionSupport)invocation.getAction();
                   String message = extractMessagefromException()//--custom method to extract message embedded in exception.  
               as.addActionMessages(message);
      //-- above will not work result has already been rendered right? and hence it wouldn't matter if i add action messages now.
           }
         }                                               
   } 

Второй подход использования прослушивателя с предварительным результатом заключается в добавлении сообщений действия, как описано выше, в методе прослушивателя с предварительным результатом, так как результат еще предстоит отобразить, и я могу смело его изменить. Однако я не уверен, будет ли когда-либо выполняться прослушиватель с предварительным результатом, если исключение выдается в действии? И даже если это произойдет, как я могу получить объект исключения, брошенный действием?

Пожалуйста, дайте мне знать любой другой подход, при котором мне не нужно загромождать свои занятия блоком try-catch

0 ответов

Другие вопросы по тегам