定义默认语言环境并处理Spring Locale Interceptor的异常

时间:2014-07-16 17:22:35

标签: java spring spring-mvc locale

是否可以定义应该加载的默认语言环境,以防用户设置?lang = unknownlang

在我的spring-servlet.xml中,我有:

<bean id="localeChangeInterceptor"
   class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
    <property name="paramName" value="lang" />
</bean>

<bean id="localeResolver"
    class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
    <property name="defaultLocale" value="pt" />
</bean>

另外如果我在我的url param中指定了无效字符,例如?lang = p @ t,spring会抛出一个应该处理的异常,我该如何处理呢?

Error 500: org.springframework.web.util.NestedServletException: Request processing failed&#59; nested exception is java.lang.IllegalArgumentException: Locale part &quot;&#39;&quot; contains invalid characters

1 个答案:

答案 0 :(得分:0)

我设法解决了这些问题。

关于默认语言环境,只要资源包中有默认的.properties文件,spring就会在内部解决。

所以在我的情况下,必须有一个xxx_pt.properties xxx_en.properties和一个xxx.properties。

对于异常处理,我实际上必须覆盖LocaleChangeInterceptor类的preHandle方法并捕获异常:

<强>弹簧servlet.xml中

<bean id="localeChangeInterceptor"
    class="com.xxx.xxx.LanguageExceptionHandler">
    <property name="paramName" value="lang" />
</bean>

<强> LanguageExceptionHandler.java

public class LanguageExceptionHandler extends LocaleChangeInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        try {
            super.preHandle(request, response, handler);
        } catch (ServletException e) {
            DebugLogger.writeError("ServletException", e);
        } catch (IllegalArgumentException e) {
            DebugLogger.writeError("IllegalArgumentException", e);
        }
        return true;
    }
}

虽然根据this,在较新版本的Spring中应该以不同的方式处理无效字符。