您的位置:首页 > 编程语言 > Java开发

springmvc 集成和使用 hibernate-validator

2017-07-21 00:00 489 查看
如果有前端做检验一般不需要后端校验的,但是一下 场景下还是需要的 后端校验的。、
所以集成了下。 如果 想是 spring-boot 那么 它已经自带 校验了,,而且 校验 使用的就是 hibernate-validator 校验的,可以看看 spring-boot 校验包。

那么这里说的是 spring MVC 的 集成。

百度了一通,和自己 实践,需要导入 校验包即可,,不需要其他依赖包了。

<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.4.1.Final</version>
</dependency>

用法,例子:

@GetMapping("/girl")
@ResponseBody
public Girl girlSubmit(@Valid Girl girl ,
BindingResult bindingResult
) {
// @Valid 校验 该 girl 类,,类里面 有对应的校验 注解的
// bindingResult 校验后的结果
if (bindingResult.hasErrors()) {
// 有 校验错误,,打印出来 信息
System.out.println(bindingResult.getFieldError().getDefaultMessage());
return null;
}

girl.setAge(girl.getAge());

return girl;
}

百度了一通, 基本的 初级用法是这样的。
可是有一个问题就是,, 每次校验我们都需要 写 和判断是否 校验通过了,好烦啊比如:

if (bindingResult.hasErrors()) {
。。。。校验不通过处理逻辑
}

其实是可以把校验不通过 当做一个 异常,然后 拦截异常通过 处理的。例子:

@RequestMapping("/test")
@ResponseBody
public String test(@Valid TestModel tm ) {

/*if (result.hasErrors()) {
// @Valid 校验 该 girl 类,,类里面 有对应的校验 注解的
// bindingResult 校验后的结果
// 有 校验错误,,打印出来 信息
System.out.println(result.getFieldError().getDefaultMessage());
return result.getFieldError().getDefaultMessage();
}*/

return "test"+tm.getAge();

}

拦截 校验异常 : 代码

//校验异常
@ExceptionHandler(value=BindException.class)
@ResponseBody
public String handlevalid(BindException e,BindingResult bindingResult) {

System.out.println("###"+bindingResult.getFieldError().getDefaultMessage());
System.out.println(e);
System.out.println("11==="+e.getCause());
System.out.println("22==="+e.getMessage());// 记录异常
return e.getMessage();
}

参考即可了。。
下面是 xml 配置 校验器的,百度的都是这样差不多了:

<!-- 注册验证器 -->
<mvc:annotation-driven validator="validator" />

<bean id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
<!-- 这里配置将使用上面国际化配置的messageSource
<property name="validationMessageSource" ref="messageSource" /> -->
</bean>

<!--
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>classpath:resource/ValidationMessages</value>
</list>
</property>
<property name="useCodeAsDefaultMessage" value="true" />
</bean>
-->

以上OK 了。。

参考地址: http://blog.csdn.net/do_bset_yourself/article/details/51314199
以及地址: http://www.cnblogs.com/leechenxiang/p/5490930.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: