如果有前端做检验一般不需要后端校验的,但是一下 场景下还是需要的 后端校验的。、 所以集成了下。 如果 想是 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