spirng配置HibernateValidator的校验问题总结

1.建立一个maven项目
这里不在描述。网上搜一下
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}个字符。

[b]6.出现校验问题解决[/b]
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
[img]http://dl2.iteye.com/upload/attachment/0123/5146/d8a712c5-5062-3638-9bc6-f6118efcf349.png[/img]这样你就可以直接写中文了,不需要转化一次后复制进去,
3.不能解析出{}中的内容:同样是你的编码问题,你最好是将{}也使用unicode编码放入properties的文件,这样国际化配置消息就OK了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值