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

标签 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 参数中指定无效字符,如 ?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

最佳答案

我设法解决了这些问题。

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

所以在我的例子中,必须有一个 xxx_pt.properties xxx_en.properties 和一个 xxx.properties。

对于异常处理,我实际上不得不重写 LocaleChangeInterceptor 类的 preHandle 方法并捕获异常:

spring-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 中应该以不同方式处理无效字符。

关于java - 为 Spring Locale Interceptor 定义默认语言环境并处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24786962/

相关文章:

java - hadoop中的NoCLassDefFounderror

java - Spring Security 角色层次结构@Secured JavaConfig

java - Jquery Ajax表单提交成功前如何刷新页面?

java - 如何在 Spring MVC 中将请求映射到 HTML 文件?

spring - 创建maven项目时如何选择过滤器编号?

java - 有没有办法处理 Spring 中自定义异常处理程序内部抛出的异常?

java - 当我继承Thread时,类中的每个方法都在新Thread上运行吗?

java - 未找到声明式服务绑定(bind)方法

java - 安卓java : Anonymous sign in with Firebase always fails

java - Tomcat-Spring-Hibernate Web 应用程序中的 'PermGen out of space' 异常可以做什么?