Hibernate-validator校验框架使用教程
2017-11-14 00:00
706 查看
前言
这几天刚好在弄接口相关东西,发现如果对某个多字段的实体进行验证的话,会写很多麻烦而且冗余的代码,所以学了一下相关验证框架。Hibernate-Validation
在各层中重复的校验逻辑既导致了不必要的资源消耗,还使得逻辑不够单一(每层都夹杂着校验的逻辑),JSR 303 Bean Validation就是在这种背景下产生的一个数据验证的J2EE规范。而我们这篇文中将要介绍的Hibernate Validator则是JBoss社区开源的一个JSR 303 Bean Validation规范的优秀实践使用流程
导入maven<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>6.0.4.Final</version> </dependency>
配置文件引入相关配置
<mvc:annotation-driven validator="validator"/> <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> <property name="providerClass" value="org.hibernate.validator.HibernateValidator"/> <property name="validationMessageSource" ref="messageSource"/> </bean> <!-- 校验错误信息配置文件 --> <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <!-- 资源文件名 --> <property name="basename" value="classpath:validationMessages"/> <!-- 对资源文件内容缓存时间,单位秒 --> <property name="fileEncodings" value="GBK"/> <property name="defaultEncoding" value="GBK"/> <property name="cacheSeconds" value="120"/> </bean>
创建存储错误消息的properties文件
notnull=该字段不能为空
在验证的model里面对字段进行验证
public class Demo implements Serializable { private static final long serialVersionUID = 1L; @NotBlank(message = "{notnull}") private String name; @NotEmpty(message = "{notnull}") private List<String> address; @NotNull(message = "{notnull}") private int address; }
注意:
@NotEmpty 用在集合类上面
@NotBlank 用在String上面
@NotNull 用在基本类型上
使用方法
1 通过在接口出调用,自动验证@RequestMapping(value = "/demo") public String baseInfoCompany(@RequestParam @Valid Demo demo ,BindingResult result) { if(result.hasErrors()){ //这边对错误消息进行处理 } return "success" }
2 通过工具类,主动验证某个实体类
@RequestMapping(value = "/demo") public String baseInfoCompany(@RequestParam Demo demo) { ValidateUtil.validate(demo); return "success" }
ValidateUtil文件
public class ValidateUtil { public static <T> void validate(T obj) { LocalValidatorFactoryBean validator = (LocalValidatorFactoryBean) SpringContextHolder.getBean("validator");//这边获取spring已经实例化的验证器即可,即刚才配置文件里配置验证器id Set<ConstraintViolation<T>> constraintViolations = validator.validate(obj); //抛出检验异常 Iterator<ConstraintViolation<T>> iter = constraintViolations.iterator(); while (iter.hasNext()) { ConstraintViolation<T> error = iter.next(); StringBuffer buffer = new StringBuffer().append("[") .append(error.getPropertyPath().toString()).append("]") .append(error.getMessage()); throw new IllegalArgumentException(buffer.toString()); } } }
给点小福利吧,全局捕捉异常的例子
//这个定义要捕捉的异常类 @ExceptionHandler({IllegalArgumentException.class}) @ResponseBody public RespBean runTimeException(HttpServletRequest request, IllegalArgumentException e) { String uri = request.getRequestURI(); LOGGER.error("[" + uri + "]捕获非法异常{}", e.getMessage(), e); return ErrRespBean.newInstance(ReturnConsts.ERROR_EXCEPTION, e.getMessage()); }
后语
千万注意实体类里注解引用的message引用properties的key一定要正确,不然像我因为这个点,找了很久的问题。有什么问题可以留言,感谢您耐心看完。相关文章推荐
- Hibernate-validator校验框架使用教程
- Hibernate-validator校验框架使用
- springmvc使用hibernate-validator校验框架实现后端校验
- 高效使用hibernate-validator校验框架
- 基于hibernate_validator的异步表单校验框架使用说明
- springMVC校验之hibernate validator校验器的使用
- Hibernate-validator校验框架
- Hibernate-validator校验框架
- spring mvc结合freemarker,使用hibernate validation框架做校验及国际化
- Hibernate-validator校验框架
- 使用jQuery的formValidator框架对表单数据实现前台校验
- spring MVC 使用 hibernate validator验证框架,国际化配置
- [教程]使用MyEclipse实现集成Struts+hibernate框架的项目开发过程
- 关于使用SSM整合的时候,使用hibernate校验框架出现500异常问题解决
- Java的Hibernate框架中复合主键映射的创建和使用教程
- Validator验证框架使用教程
- springmvc使用Hibernate的校验框架validation
- spring mvc结合freemarker,使用hibernate validation框架做校验及国际化
- 在Myeclipse里使用Junit贴图教程与使用JUnit在struts+spring+hibernate框架环境下进行单元测试
- JSR303校验框架介绍和Hibernate Validator扩展