SpringMVC 使用JSR-303进行校验Bean Validation------国际化

即根据不同的语言选择不同的错误消息显示。

1、本地化解析器

<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">  
    <property name="cookieName" value="locale"/>  
    <property name="cookieMaxAge" value="-1"/>  
    <property name="defaultLocale" value="zh_CN"/>  
</bean>  

此处使用cookie存储本地化信息,当然也可以选择其他的,如Session存储

2、设置本地化信息的拦截器

<mvc:interceptors>  
    <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">  
        <property name="paramName" value="language"/>  
    </bean>  
</mvc:interceptors>  

即请求参数中通过language设置语言。

3、消息文件

image

4、 浏览器输入

http://localhost:9080/spring4/changePassword?password=1&confirmation=2&==language=en_US==

二、使用spring boot实现国际化

1.配置

/**
 * @author jinweia.wu
 * 国际化配置
 * @create 2018-02-24 15:35
 **/
@Configuration
public class ValidatorConfiguration extends WebMvcConfigurerAdapter {
    @Bean
    public LocaleResolver localeResolver() {
        SessionLocaleResolver slr = new SessionLocaleResolver();
        slr.setDefaultLocale(Locale.SIMPLIFIED_CHINESE);
        return slr;
    }

    @Bean
    public LocaleChangeInterceptor localeChangeInterceptor() {
        LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
        lci.setParamName("lang");
        return lci;
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(localeChangeInterceptor());
    }
}

2.添加资源文件

这里需要注意的地方是:
必须放在classes目录下,而且必须用ValidationMessages这个名字
也就是文件名称需要命令为:

ValidationMessages.properties

ValidationMessages_en.properties

中文

user.id.null=用户名不能为空

英文

user.id.null= user name is not null

3.修改User校验获取信息

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@GroupSequence({User.Adult.class, User.Other.class,User.class})
public class User {
    @NotNull(message="{user.id.null}")
    private String userName;
    //@Max(value=120,message="年龄最大不能查过120",groups = {Adult.class})

    private int age;
    @Email(message="邮箱格式错误",groups = {Other.class})
    private String email;
    @CannotHaveBlank(groups = {Adult.class})
    private String sex;
    @Valid
    @ConvertGroup(from=Adult.class,to=Other.class)
    private String password;
    //分组
    public interface  Adult{}
    public interface Other{}
}

4.发送请求

http://localhost:9000/validator/login?lang=en
注意:此处url参数和java配置中 lci.setParamName(“lang”);一致,参数的值与ValidationMessages_en.properties保持一致

总结:
本地化结合EL表达式可以人性化的给出提示信息,有利于用户体验。

想了解更多java相关技术,请关注公众号“JavaEE那些事”

扫描下面二维码,更多技术资料等你来拿
这里写图片描述

猜你喜欢

转载自blog.csdn.net/forwujinwei/article/details/79363446