我正在使用 Spring with Velocity。有时 velocity 会产生类似
的异常Error in interpolating string literal : org.apache.velocity.exception.MethodInvocationException: Invocation of method 'getMessage' in class org.springframework.web.servlet.support.RequestContext threw exception class org.springframework.context.NoSuchMessageException : No message found under code 'XX' for locale 'en_US'.
问题是 - 我可以指示 spring 抑制 NoSuchMessageException
吗?我是 Spring 的新手,所以不知道我是否可以创建一个异常处理程序,如果找不到消息,它不会抛出异常?在我的用例中,在 messages.properties
文件中找不到某些消息是一个有效的用例。
[编辑] - 我找到了一种方法 org.apache.velocity.app.event.MethodExceptionEventHandler
来为速度提供偶数处理程序。但是我不确定如何在 Spring 中注册它。
最佳答案
我认为,直接解决问题会更好,而不是试图抑制异常,这可能导致避免行为和未完成的操作。
但是,您没有告诉我们您希望系统在消息未针对给定代码定义的情况下如何响应。您想要一个空白字符串,还是应该将代码本身用作默认消息?
我假设在您的 Spring 上下文中的某处您定义了某种类型的 messageSource
bean。这些 MessageSource
beans 通常有一个属性 useCodeAsDefaultMessage
。这默认为 false
,但是当设置为 true
时,如果没有定义消息,它们将返回代码本身作为消息。
或者,您可以继承 MessageSource
类(无论您使用哪个),并覆盖 getDefaultMessage()
方法来处理无法解析代码的情况.
关于Spring - 如何处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3926300/