后台开发需要对对象的传进来的参数进行校验,有专门的校验工具,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使用方法相关推荐

  1. Validation阻止表单自动提交,使用Ajax提交表单(使用Validation的submitHandler方法)

    在使用Validation时,我们有时候不希望验证成功后直接跳转页面(比如判断登录密码用户名正确与否),而希望自己使用Ajax提交,并且验证回调的结果. $('.login-form').valida ...

  2. java.lang.NoClassDefFoundError: javax/transaction/Synchronization 解决方法。

    解决方法: 项目中添加jta.jar 解决. 异常代码: java.lang.NoClassDefFoundError: javax/transaction/Synchronization org.h ...

  3. eclipse 无法解析导入 javax.servlet 的解决方法

     出现上述问题的原因是你的Eclipse项目没有导入JSP运行所需要的Tomcat类库,主要是servlet-api.jar文件(或者servlet.jar),tomcat容器里面有这文件,在以下位置 ...

  4. javax.validation.ParameterNameProvider

    今天在做spring和hibernate整合的时候遇到这个问题: Caused by: java.lang.NoClassDefFoundError: javax/validation/Paramet ...

  5. Spring4 对Bean Validation规范的新支持(方法级别验证)

    Bean Validation standardizes constraint definition, declaration and validation for the Java platform ...

  6. javax.validation 校验 validator

    使用场景 通常在遇到大量的参数进行校验时使用: 什么是javax.validation JSR303是一套JavaBean参数校验的标准,它定义了很多常用的校验注解,我们可以直接将这些注解加在我们Ja ...

  7. springboot使用Validation API和全局异常优雅的校验方法参数

    目录 一.为什么使用 Validation 来验证参数 二.如何使用Validation相关注解进行参数校验 三.Validation类的相关注解及描述 四.使用 Validation API 进行参 ...

  8. javax.validation.ValidationException: Unable to create a Configuration

    错误信息: [org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean]-Failed to set up ...

  9. javax.validation.ValidationException: Unable to find a default provider

    2019独角兽企业重金招聘Python工程师标准>>> [ERROR] [2016-11-16 13:58:21 602] [main] (FrameworkServlet.java ...

  10. [javax.validation]验证

    为什么80%的码农都做不了架构师?>>>    package main;import java.util.Set;import javax.validation.Constrain ...

最新文章

  1. 快速理解JavaScript面向对象编程—原型
  2. c# 实现二进制文件读写、ini文件读写以及一些文件和目录的常用操作,在某些特定情况下会用到,如录波文件要保存.dat
  3. oracle监听错误与hosts文件配置
  4. 【电子信息复试】考研复试常考问题——数据结构
  5. python list长度_python的入门阶段 编程思维100题 我跟罗志祥没关系
  6. 【活动(广州)】MonkeyFest2018 微软最有价值专家讲座
  7. php一点通,编程一点通
  8. MATLAB图形插入标题
  9. 笔记:常见TCP端口号
  10. IDM 扩展安装版本冲突解决(Chrome尝试对扩展程序进行降级处理)
  11. 拉曼光谱去除荧光性 matlab,基于多项式拟合的拉曼光谱基线漂移校正方法(英文)...
  12. 解决POI事件驱动模式读取不到Java代码创建的Excel表格数据问题
  13. 卑微打工人!java打地鼠窗口小游戏代码
  14. 菜鸟窝Android百度云视频,菜鸟窝React Native 视频系列教程
  15. DSP/BIOS详解入门-再回炉
  16. mysql连接不上数据库
  17. 职场人上班成本调查:工作一天要花掉多少钱?
  18. 【Python】Python之end()关键字使用
  19. 2021SC@SDUSC山东大学软件学院软件工程应用与实践--YOLOV5代码分析(四)general.py-2
  20. 公司来了个新JAVA开发,一副毛头小子的样儿,哪想到......

热门文章

  1. 高级钟点秘书——会议安排
  2. 【视线追踪】视线追踪的性能评估框架 及 基础知识
  3. 8.TypeScript入门之TS类型声明文件
  4. 如何下载历史版本和最新版本的iar
  5. 景深与光圈、拍摄距离和镜头焦距的关系
  6. 解谜破案类游戏:夜间呼叫 for Mac
  7. 产品经理为什么比程序员工资要高?百度员工:因为他是产品灵魂
  8. 北京海淀驾校学车经验
  9. 面对“职业规划”问题,程序员应该如何回答?
  10. 恒生电子软件工程师面试