Spring - как обрабатывать исключение

Я использую Spring со скоростью. Время от времени скорость создает исключение, подобное

Ошибка интерполяции строкового литерала: org.apache.velocity.exception.MethodInvocationException: вызов метода getMessage в классе org.springframework.web.servlet.support.RequestContext вызвал исключение класса org.springframework.context.NoSuchMessageException: сообщение не найдено в код «XX» для локали «en_US».

Вопрос в том, могу ли я поручить Spring подавить NoSuchMessageException? Я новичок в Spring, поэтому не знаю, могу ли я создать обработчик исключений, который не будет генерировать исключение, если сообщение не найдено? В моем случае это допустимый вариант использования, когда некоторые сообщения в файле messages.properties не найдены.

[РЕДАКТИРОВАТЬ] - я нашел способ org.apache.velocity.app.event.MethodExceptionEventHandler предоставить четный обработчик для скорости. Однако я не уверен, как зарегистрировать его в Spring.


person Shamik    schedule 13.10.2010    source источник


Ответы (1)


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

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

Я предполагаю, что где-то в вашем контексте Spring у вас есть определенный bean-компонент messageSource. Эти MessageSource bean-компоненты обычно имеют свойство useCodeAsDefaultMessage. По умолчанию это false, но если установлено true, они будут возвращать сам код в качестве сообщения в тех случаях, когда сообщение не определено.

В качестве альтернативы вы можете создать подкласс класса MessageSource (в зависимости от того, какой из них вы используете) и переопределить метод getDefaultMessage() для обработки случаев, когда код не может быть разрешен.

person skaffman    schedule 13.10.2010