springmvc的数据校验的配置和使用
来源:互联网 发布:天谕凌体型捏脸数据 编辑:程序博客网 时间:2024/05/21 06:36
参考链接:
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校验器 --> <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执行时由上到下使用映射器和适配器,然而我们把校验器注入到了下面某个适配器中,导致无法执行校验器;
阅读全文
0 0
- springmvc的数据校验的配置和使用
- springmvc的数据校验
- SpringMVC的数据校验
- SpringMVC的数据校验
- SpringMVC 数据的格式化、JSR 303数据校验和国际化
- SpringMVC 配置和使用校验框架
- SpringMVC和FreeMarker整合中使用注解方式的后台数据校验
- SpringMVC和FreeMarker整合中使用注解方式的后台数据校验validate(部分自己扩展)
- 使用springMVC的校验机制
- SpringMVC之数据的正确性和合法性校验
- 5、springMVC的校验和数据回显
- springmvc数据的格式化及数据校验
- springmvc(四) springmvc的数据校验的实现
- springmvc使用Hibernate的校验框架validation
- springMVC校验之hibernate validator校验器的使用
- SpringMVC参数校验,包括JavaBean和基本类型的校验
- springmvc的校验
- SpringMvc的校验框架
- Linux指定文件删除命令
- CRM这把火还能燃烧多久?
- 拼接sql语句 减少数据库压力
- netty原理详解
- ElasticSearch 5.x & 2.x弹性插件头安装(mac)
- springmvc的数据校验的配置和使用
- Nginx执行php,显示“No input file specified. ”的处理方法
- 63. Unique Paths II
- (3)x210: fix the no output problem at "Starting kernel..."
- vs2015 cuda opengl 混编译 Error"GLboolean" has already been declared in the current scope
- c语言中的基本数据类型
- 遍历QTableWidget中的数据
- 根据两点经纬度计算距离
- 序列化和持久化