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

springmvc的数据校验的配置和使用

2017-09-22 10:08 351 查看
参考链接:

SpringMVC数据验证——第七章 注解式控制器的数据验证、类型转换及格式化——跟着开涛学SpringMVC

SpringMVC学习系列(6) 之 数据验证

SpringMVC使用@Valid注解进行数据验证

数据验证框架 Apache BVal 简介(更新)

====================================================

1.maven管理引入springmvc注解数据校验所需jar包:

<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.1.0.Final</version>
</dependency>


2.配置springmvc的全局数据校验:

springmvc全局数据校验的配置方式:

注意:本质其实就是将校验器绑定到处理器适配器上;

全局配置方式1:通过标签annotation-driven将校验器自动注入到适配器中;

<!-- 即使不添加validator="validator",只要引入了hibernate的校验插件,仍然能够,自动将默认的校验器注入到适配器中 -->
<mvc:annotation-driven validator="validator">


全局配置方式2(自学):手动将校验器注入到适配器中

<!-- 处理器适配器,执行拦截器和后端控制器,并配置相应的数据转换类和数据校验类 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<!-- 数据校验 -->
<property name="webBindingInitializer" ref="webBindingInitializer"></property>
</bean>
<!-- 全局数据校验 -->
<!-- 数据验证 Validator bean -->
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<!-- 校验器,使用hibernate校验器 --><
17033
/span>
<property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
<!--  指定校验使用的资源文件,在文件中配置校验错误信息,如果不指定则默认使用classpath下面的ValidationMessages.properties文件 -->
<property name="validationMessageSource" ref="messageSource"/>
</bean>
<bean id="webBindingInitializer" class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
<property name="validator" ref="validator"/>
</bean>


3.自定义局部校验:

(1)自定义数据校验类:

package validation;

import org.springframework.util.StringUtils;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;

import edu.hrbeu.platform.modeling.pojo.TestOrder;

/**
* Created by wb-zhangkenan on 2016/9/2.
*/
public class TestValidtor implements Validator{

/**
* 判断支持的JavaBean类型
* @param aClass
* @return
*/
@Override
public boolean supports(Class<?> aClass) {
return TestOrder.class.equals(aClass);
}

/**
* 实现Validator中的validate接口
* @param obj
* @param errors
*/
@Override
public void validate(Object obj, Errors errors) {
//把校验信息注册到Error的实现类里
ValidationUtils.rejectIfEmpty(errors,"id",null,"id不能为空!");
TestOrder testOrder = (TestOrder) obj;
if(StringUtils.isEmpty(testOrder.getName())){
errors.rejectValue("name",null,"家庭地址不能为空!!!!");
}
}
}


(2)测试controller:

package edu.hrbeu.platform.modeling.businessCollaboration.controller;

import java.util.List;

import javax.validation.Valid;

import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import edu.hrbeu.platform.modeling.pojo.TestOrder;
import validation.TestValidtor;

@Controller
@RequestMapping("/testValidation")
public class TestValidationController {
//绑定PersonalValidator
@InitBinder
public void initBinder(WebDataBinder webDataBinder){
webDataBinder.addValidators(new TestValidtor());
}
@RequestMapping("testPojo")
@ResponseBody
public List<ObjectError> testPojo(@Valid TestOrder testOrder, BindingResult bindingResult) {
List<ObjectError> allErrors = bindingResult.getAllErrors();
return allErrors;
}

}


(3)对应的实体类:

package edu.hrbeu.platform.modeling.pojo;

import javax.validation.constraints.NotNull;

import org.hibernate.validator.constraints.NotEmpty;

public class TestOrder {
@NotNull(message="不能为null....")
private Integer id;
@NotEmpty(message="不能为空串....")
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "TestOrder [id=" + id + ", name=" + name + "]";
}

}


总结:如果全局校验配置不成功,可能是映射器和适配器配置错误,可能配置了多个映射器和适配器,而springmvc执行时由上到下使用映射器和适配器,然而我们把校验器注入到了下面某个适配器中,导致无法执行校验器;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐