javax.validation.Validation使用方法
后台开发需要对对象的传进来的参数进行校验,有专门的校验工具,validation bean 是基于JSR-303标准开发出来的,使用注解方式实现,及其方便,但是这只是一个接口,没有具体实现.Hibernate Validator是一个hibernate独立的包,可以直接引用,他实现了validation bean同时有做了扩展,比较强大。
要使用在pom.xml里添加依赖
<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.4.1.Final</version>
</dependency>
对要验证的类添加的注解
一个用于VO继承的父对象,实现了一个Validate方法,可以抛出自定义异常,然后把违背约束的属性给输出出来
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.groups.Default;public class BaseVO implements Serializable, Cloneable {private static final long serialVersionUID = -3282093394377931421L;//得到一个验证器实例private static Validator validator = Validation.buildDefaultValidatorFactory().getValidator();//验证方法,抛出自定义异常public void validate() throws XXXException{//用Map保存错误Map<String, StringBuffer> errorMap = null;//把对象放到验证器的验证方法中,用Set存储违背约束的对象Set<ConstraintViolation<BaseVO>> set = validator.validate(this, Default.class);//当有违背约束的对象时if (set != null && set.size() > 0) {//初始化maperrorMap = new HashMap<String, StringBuffer>();//保存错误属性String property = null;for (ConstraintViolation<BaseVO> cv : set) {// 这里循环获取错误信息,可以自定义格式property = cv.getPropertyPath().toString();if (errorMap.get(property) != null) {errorMap.get(property).append("," + cv.getMessage());} else {StringBuffer sb = new StringBuffer();sb.append(cv.getMessage());errorMap.put(property, sb);}}if (errorMap != null) {StringBuffer sb = new StringBuffer();for (Map.Entry<String, StringBuffer> m : errorMap.entrySet()) {sb.append(m.getValue().toString()).append("\r\n");}//输出throw new XXXException(sb.toString());}}}}
或者参照这个博客可以将其封装成工具类
package com.alibaba.banff.web.util;import java.util.HashMap;
import java.util.Map;
import java.util.Set;import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.groups.Default;/*** 校验工具类* * @author lizhilong*/
public class ValidationUtils {private static Validator validator = Validation.buildDefaultValidatorFactory().getValidator();public static <T> ValidationResult validateEntity(T obj) {ValidationResult result = new ValidationResult();Set<ConstraintViolation<T>> set = validator.validate(obj, Default.class);// if( CollectionUtils.isNotEmpty(set) ){if (set != null && set.size() != 0) {result.setHasErrors(true);Map<String, String> errorMsg = new HashMap<String, String>();for (ConstraintViolation<T> cv : set) {errorMsg.put(cv.getPropertyPath().toString(), cv.getMessage());}result.setErrorMsg(errorMsg);}return result;}public static <T> ValidationResult validateProperty(T obj, String propertyName) {ValidationResult result = new ValidationResult();Set<ConstraintViolation<T>> set = validator.validateProperty(obj, propertyName, Default.class);if (set != null && set.size() != 0) {result.setHasErrors(true);Map<String, String> errorMsg = new HashMap<String, String>();for (ConstraintViolation<T> cv : set) {errorMsg.put(propertyName, cv.getMessage());}result.setErrorMsg(errorMsg);}return result;}
}
校验工具类返回的数据ValidationResult(省略getset):
package com.aliyun.prophet.facade.partner.flaw;import java.util.Map;/*** 校验结果* * @author lizhilong*/
public class ValidationResult {// 校验结果是否有错private boolean hasErrors;// 校验错误信息private Map<String, String> errorMsg;
}
javax.validation.Validation使用方法相关推荐
- Validation阻止表单自动提交,使用Ajax提交表单(使用Validation的submitHandler方法)
在使用Validation时,我们有时候不希望验证成功后直接跳转页面(比如判断登录密码用户名正确与否),而希望自己使用Ajax提交,并且验证回调的结果. $('.login-form').valida ...
- java.lang.NoClassDefFoundError: javax/transaction/Synchronization 解决方法。
解决方法: 项目中添加jta.jar 解决. 异常代码: java.lang.NoClassDefFoundError: javax/transaction/Synchronization org.h ...
- eclipse 无法解析导入 javax.servlet 的解决方法
出现上述问题的原因是你的Eclipse项目没有导入JSP运行所需要的Tomcat类库,主要是servlet-api.jar文件(或者servlet.jar),tomcat容器里面有这文件,在以下位置 ...
- javax.validation.ParameterNameProvider
今天在做spring和hibernate整合的时候遇到这个问题: Caused by: java.lang.NoClassDefFoundError: javax/validation/Paramet ...
- Spring4 对Bean Validation规范的新支持(方法级别验证)
Bean Validation standardizes constraint definition, declaration and validation for the Java platform ...
- javax.validation 校验 validator
使用场景 通常在遇到大量的参数进行校验时使用: 什么是javax.validation JSR303是一套JavaBean参数校验的标准,它定义了很多常用的校验注解,我们可以直接将这些注解加在我们Ja ...
- springboot使用Validation API和全局异常优雅的校验方法参数
目录 一.为什么使用 Validation 来验证参数 二.如何使用Validation相关注解进行参数校验 三.Validation类的相关注解及描述 四.使用 Validation API 进行参 ...
- javax.validation.ValidationException: Unable to create a Configuration
错误信息: [org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean]-Failed to set up ...
- javax.validation.ValidationException: Unable to find a default provider
2019独角兽企业重金招聘Python工程师标准>>> [ERROR] [2016-11-16 13:58:21 602] [main] (FrameworkServlet.java ...
- [javax.validation]验证
为什么80%的码农都做不了架构师?>>> package main;import java.util.Set;import javax.validation.Constrain ...
最新文章
- 快速理解JavaScript面向对象编程—原型
- c# 实现二进制文件读写、ini文件读写以及一些文件和目录的常用操作,在某些特定情况下会用到,如录波文件要保存.dat
- oracle监听错误与hosts文件配置
- 【电子信息复试】考研复试常考问题——数据结构
- python list长度_python的入门阶段 编程思维100题 我跟罗志祥没关系
- 【活动(广州)】MonkeyFest2018 微软最有价值专家讲座
- php一点通,编程一点通
- MATLAB图形插入标题
- 笔记:常见TCP端口号
- IDM 扩展安装版本冲突解决(Chrome尝试对扩展程序进行降级处理)
- 拉曼光谱去除荧光性 matlab,基于多项式拟合的拉曼光谱基线漂移校正方法(英文)...
- 解决POI事件驱动模式读取不到Java代码创建的Excel表格数据问题
- 卑微打工人!java打地鼠窗口小游戏代码
- 菜鸟窝Android百度云视频,菜鸟窝React Native 视频系列教程
- DSP/BIOS详解入门-再回炉
- mysql连接不上数据库
- 职场人上班成本调查:工作一天要花掉多少钱?
- 【Python】Python之end()关键字使用
- 2021SC@SDUSC山东大学软件学院软件工程应用与实践--YOLOV5代码分析(四)general.py-2
- 公司来了个新JAVA开发,一副毛头小子的样儿,哪想到......