这里不在描述。网上搜一下
2.需要依赖的maven配置
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.2.2.Final</version> </dependency> //spring我用的4.2.9.RELEASE。上了4.3.0就不会有对应的velocity的加载项了
3.配置对应的spring配置文件
//这里不写国际化消息拦截哪里配置了,应该不会有问题,网上复制一下就好了。 <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> <property name="providerClass" value="org.hibernate.validator.HibernateValidator"/> <!--不设置则默认为classpath下的 ValidationMessages.properties --> <property name="validationMessageSource" ref="validationMessageSource"/> </bean> <!-- 默认的注解映射的支持 --> [color=red]<mvc:annotation-driven validator="validator"/>[/color] <bean id="validationMessageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <!-- 如果在国际化资源文件中找不到对应代码的信息,就用这个代码作为名称 --> <property name="useCodeAsDefaultMessage" value="false" /> <property name="fileEncodings" value="utf-8"></property> <property name="basename"> <value>[color=red]classpath:[/color]messages/messages</value> </property> </bean>
4.要验证的实体类
public class Spitter implements Serializable { @NotEmpty(message="不能为空额") @Pattern(regexp = "[a-zA-Z0-9_]{5,10}", message = "{username.illegal}") private String username; @Size(min = 5, max = 10, message = "{password.illegal}") private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
对应的页面控制Controller /** * 校验的控件 * 标红的部分记住在@Valid所修饰的对象之后,也可以是Errors对象,是成对出现的 * 相当于前面是给你一个标准,后边是对应哪个标准收集错误。 * @param spitter * @param result * @return */ @RequestMapping(value = "/valid", method = RequestMethod.GET) public String valid(@Valid Spitter spitter, [color=red]BindingResult result[/color], ModelMap modelMap) { if (result.hasErrors()) { modelMap.addAttribute("errors", result.getFieldError().getDefaultMessage()); logger.error(result.toString()); } return "insur_product"; }
5.配置对应的/messages/messages_zh_CN.properties文件
username.illegal=请输入5-10位的字母数字下划线的用户名 #Size.spitter.password=密码[${validatedValue}]长度必须为{min}到{max}个字符 password.illegal=密码长度必须为{min}到{max}个字符。
6.出现校验问题解决
1.校验时候直接输出{password.illegal}
Field error in object 'spitter' on field 'password': rejected value [1]; codes [Size.spitter.password,Size.password,Size.java.lang.String,Size]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [spitter.password,password]; arguments []; default message [password],10,5]; default message [[color=red]{password.illegal}[/color]]
这个是你没有加载对properties文件。看看你的文件加载对不对。用tomcat+maven时候注意修改配置文件最好clean package一下
2.校验时候出现乱码问题如:
Field error in object 'spitter' on field 'password': rejected value [1]; codes [Size.spitter.password,Size.password,Size.java.lang.String,Size]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [spitter.password,password]; arguments []; default message [password],10,5]; default message [color=red][å¯ç é¿åº¦å¿ 须为5å°10个å符][/color]
能到这里就是你已经正确配置了路径,但是你properties中中文不是unicode的编码,如果你不是idea你可以转成unicode编码放入properties文件,如果你是idea你只需要设置选中File | Settings | Editor | File Encodings
这样你就可以直接写中文了,不需要转化一次后复制进去,
3.不能解析出{}中的内容:同样是你的编码问题,你最好是将{}也使用unicode编码放入properties的文件,这样国际化配置消息就OK了。