2013-08-14 2 views
1

Это было задано несколько раз в Google-суше, но я не могу применить эти резолюции к своей ситуации. В моем приложении J2EE используется Spring, и ранее я использовал SimpleMappingExceptionResolver для перехвата исключений, чтобы показать дружественную страницу ошибок для моих пользователей. Один из ребят в моей команде имеет свой собственный пакет и использует расширенный класс исключений в качестве транспортного средства для передачи ошибок проверки своим пользователям. Итак, каждый раз, когда пользователь вводит неверные данные, он запускает страницу исключения. Он отказывается менять свой код (хотя я и должен это делать), поэтому теперь я вынужден сделать ошибку, обрабатывая специфическую для пакета или контроллера.@ExceptionHandler не срабатывает

Я попытался использовать аннотацию @ExceptionHandler, чтобы сделать это, но, похоже, она не стреляет. Что я делаю не так? Я ожидаю вызова dmapproval, чтобы по существу вернуть вид applicationError.

Вот мой контроллер:

@Controller 
public class ExecutiveApprovalController { 

    /*omitted stuff*/ 

    @ExceptionHandler(Exception.class) 
    public String routToErrorHandler(Exception anExc) { 
     return "applicationError"; 
    } 

    @RequestMapping(value = "/dmapproval", method = RequestMethod.GET) 
    public String dmApproval(Model model, HttpServletRequest request) throws Exception {  

     throw new RuntimeException(); // just for testing exception logic 
    } 

    /*omitted stuff here, too*/ 
}  

Спасибо за вашу помощь !!

+0

На самом деле у вашего диспетчера есть '' или вы вручную настроили различные компоненты распознавателя распознавания/метода? – Affe

+0

Я использую '' в моем файле webmvc-config.xml. –

ответ

1

Ваш снипп хорошо выглядит; единственное различие между кодом и то, что я рабочий, что я аннотирования метод обработчика исключений вроде этого:

@ExceptionHandler(Throwable.class) 

Как и в сторону; это гораздо менее изящно, чем использование SimpleMappingExceptionResolver (что звучит так, как вы уже знаете!). Я прошу вас изгоев напарнику пересмотреть его проверки подход и использовать исключения только в исключительных случаях;)

+0

Спасибо за ответ. Что-то еще должно быть неправильно; даже после использования 'Throwable.class' я все еще получаю сообщение о сдаче' Error 500: org.springframework.web.util.NestedServletException: обработка запроса не удалась; Вложенное исключение - это java.lang.RuntimeException' в интерфейсе. И, к сожалению, я не могу передумать. –

+0

Работает ли он, если вы измените его на: @ExceptionHandler (RuntimeException.class) – StuPointerException

+0

Нет, нет. Я действительно ожидал, что это сработает. Возможно, есть какая-то конфигурация, которая препятствует правильной работе? Имеет ли Spring класс 'org.springframework.web.servlet.handler' с свойством' nothingWorksTheWayYouExpectedItTo', я могу установить значение false? –

0

Вы добавили этот конфиг в вашем сервлет-context.xml

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver"> 

+0

Добавление ссылки на AnnotationMethodHandlerExceptionResolver тоже не помогло. –

Смежные вопросы