JSR303是JAVA EE6中的子规范。

用于对Java Bean的字段值进行校验,确保输入进来的数据在语义上是正确的,使验证逻辑从业务代码中脱离出来。

JSR303是运行时数据验证框架,验证之后验证的错误信息会马上返回。

有两个版本JSR303(BeanValidation1.0)和JSR349(BeanValidation1.1)。

由于之前使用的框架是structs2,没有使用springMvc没办法直接用注解,所以写了一个通用验证工具类,有其他好的验证建议可以写评论一起交流,以下是具体用法:

1.BeanValidatorUtils(必要)

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import javax.validation.Validation;
import javax.validation.Validator;import org.hibernate.validator.HibernateValidator;
import org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator;
import org.hibernate.validator.resourceloading.AggregateResourceBundleLocator;/*** 通用验证处理方法 工具类,符合JSR303验证规范,内部采用Hibernate Validator实现*/
public class BeanValidatorUtils {/** 存放错误信息的properties数组 */public static final List<String> VALIDATION_MESSAGES = Arrays.asList("validationMessage");/** 错误消息分隔符 */public static final String SEPARATOR = "<br>";/*** 使用hibernate的注解来进行验证 .failFast(true)遇到错误立即报错*/private static Validator validator = Validation.byProvider(HibernateValidator.class).configure().messageInterpolator(new ResourceBundleMessageInterpolator(new AggregateResourceBundleLocator(VALIDATION_MESSAGES))).buildValidatorFactory().getValidator();/*** 调用JSR303的validate方法, 验证失败时返回错误信息列表* * @param bean*            要验证的JavaBean* @param groups*            验证分组* @return 错误信息列表*/public static <T> List<String> validateListResult(T bean, Class<?>... groups) {List<String> errorMessages = new ArrayList<String>();Set<ConstraintViolation<T>> constraintViolations = validator.validate(bean, groups);// 抛出检验异常if (constraintViolations.size() > 0) {for (ConstraintViolation<T> violation : constraintViolations) {errorMessages.add(violation.getMessage());}}return errorMessages;}/*** 调用JSR303的validate方法, 验证失败时返回错误信息Map* * @param bean*            要验证的JavaBean* @param groups*            验证分组* @return 错误信息列表*/public static <T> Map<String, String> validateMapResult(T bean, Class<?>... groups) {Map<String, String> errorMessages = new HashMap<String, String>();Set<ConstraintViolation<T>> constraintViolations = validator.validate(bean, groups);// 抛出检验异常if (constraintViolations.size() > 0) {for (ConstraintViolation<T> violation : constraintViolations) {errorMessages.put(violation.getPropertyPath().toString(), violation.getMessage());}}return errorMessages;}/*** 调用JSR303的validate方法, 验证失败时抛出ConstraintViolationException.* * @param bean*            要验证的JavaBean* @param groups*            验证分组* */public static void validateWithException(Object bean, Class<?>... groups) throws ConstraintViolationException {Set<? extends ConstraintViolation<?>> constraintViolations = validator.validate(bean, groups);if (constraintViolations.size() > 0) {// 错误信息以异常的 形式抛出可通过e.getConstraintViolations()方法获取具体验证信息throw new ConstraintViolationException(constraintViolations);}}/*** 内部转换方法,将错误信息List转换成String* * @param errorList*            将错误信息List* @return 错误信息*/public static String validateListToString(List<String> errorList) {StringBuffer strBuffer = new StringBuffer();for (String error : errorList) {strBuffer.append(error);strBuffer.append(SEPARATOR);}return strBuffer.toString();}}

2.ValidatorGroup(一个JavaBean满足不同验证规则时使用,可选)

/**
 * 通用验证分组,可根据需求增加接口即可
 */
public interface ValidatorGroup {
    /**
     * 保存验证分组
     */
    public static interface Save {
    }
 
    /**
     * 插入验证分组
     */
    public static interface Insert {
    }
 
    /**
     * 查询验证分组
     */
    public static interface Query {
    }
 
    /**
     * 删除验证分组
     */
    public static interface Delete {
    }
 
    /**
     * 更新验证分组
     */
    public static interface Update {
    }
}
3.classpath下 validationMessage.properties(通用的验证提示信息,可选)

validator.required=是必填字段
validator.length=需要控制在
validator.engnum=只能包含大小写英文以和下划线

4.pom.xml
<dependency>  
    <groupId>javax.validation</groupId>  
    <artifactId>validation-api</artifactId>  
    <version>2.0.1.Final</version>  
</dependency>  
<dependency>  
    <groupId>org.hibernate</groupId>  
    <artifactId>hibernate-validator</artifactId>  
    <version>6.0.8.Final</version>  
</dependency>  
<dependency>  
    <groupId>javax.el</groupId>  
    <artifactId>javax.el-api</artifactId>  
    <version>3.0.0</version>  
</dependency>

BeanValidatorUtils内方法介绍
内部转换方法,将错误信息List转换成String
String strList  = BeanValidatorUtils.validateListToString(errorList);

调用通用验证方法取得验证后的错误信息列表,可传递多个验证分组(可选)
List<String> strList  = BeanValidatorUtils.validateListResult(validatorBean,group...);

调用通用验证方法取得验证后的错误信息Map,可传递多个验证分组(可选)
Map<String, String>  = BeanValidatorUtils.validateMapResult(validatorBean,group...);

调用通用验证方法,验证失败时抛出ConstraintViolationException,可传递多个验证分组(可选)
BeanValidatorUtils.validateWithException(validatorBean,group...);

使用方法


一,首先要按照JSR303验证规范,写好需要验证的JavaBean,例如

例子//需要验证的JavaBean
ValidatorBean validatorBean = new ValidatorBean();
//调用通用验证方法取得验证后的错误信息列表
List<String> strList  = BeanValidatorUtils.validateListResult(validatorBean);
//如果有错误则抛出异常
if(strList.size()>0){//将错误信息列表转化成字符串String error = BeanValidatorUtils.validateListToString(strList);System.out.println(error);
}

java JSR303 参数验证相关推荐

  1. java 接口参数验证_SpringBoot实现通用的接口参数校验

    作者:cipher 来源:http://39sd.cn/560BA 本文介绍基于Spring Boot和JDK8编写一个AOP,结合自定义注解实现通用的接口参数校验. 缘由 目前参数校验常用的方法是在 ...

  2. java validation_java bean validation 参数验证

    一.前言 在后台开发过程中,对参数的校验成为开发环境不可缺少的一个环节.比如参数不能为null,email那么必须符合email的格式,如果手动进行if判断或者写正则表达式判断无意开发效率太慢,在时间 ...

  3. java后台验证不能为空_java validation 后台参数验证的使用详解

    一.前言 在后台开发过程中,对参数的校验成为开发环境不可缺少的一个环节.比如参数不能为null,email那么必须符合email的格式,如果手动进行if判断或者写正则表达式判断无意开发效率太慢,在时间 ...

  4. jsr303 spring_使用Spring和JSR 303进行方法参数验证

    jsr303 spring Spring提供了一种使用JSR 303 bean验证来验证方法参数的简便方法. 在这篇文章中,我们将看到如何使用此功能. 建立 首先,我们需要通过创建MethodVali ...

  5. 参数验证 @Validated 和 @Valid 的区别,Java Web 开发必备。

    Spring Validation验证框架对参数的验证机制提供了@Validated(Spring's JSR-303 规范,是标准 JSR-303 的一个变种),javax提供了@Valid(标准J ...

  6. SpringBoot-服务端参数验证-JSR-303验证框架

    1. springboot 默认集成了 hibernate-validator,它默认是生效的,可以直接使用. 比如: @RestController @RequestMapping("/h ...

  7. Dubbo -- 系统学习 笔记 -- 示例 -- 参数验证

    Dubbo -- 系统学习 笔记 -- 目录 示例 想完整的运行起来,请参见:快速启动,这里只列出各种场景的配置方式 参数验证 参数验证功能是基于JSR303实现的,用户只需标识JSR303标准的验证 ...

  8. 面试:说说参数验证 @Validated 和 @Valid 的区别?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | blog.csdn.net/qq_276803 ...

  9. Spring Validation验证框架参数验证 @Validated 和 @Valid 的区别

    参数验证 @Validated 和 @Valid 的区别 Spring Validation验证框架对参数的验证机制提供了@Validated(Spring's JSR-303 规范,是标准 JSR- ...

最新文章

  1. 360金融翟政:科技成就金融场景零容错
  2. 帆软css修改按钮立体,FineReport 控件的 CSS 样式
  3. tableau必知必会之轻松搞定 关系网 图表
  4. 计算机无法加电,计算机无法加电是何故?
  5. 机器学习的数学,从入门到不放弃(文末彩蛋)
  6. dos debug命令
  7. oracle 表更新表,Oracle 更新表(另一张表)
  8. 对没有标记为安全的activex控件进行初始化和脚本运行_RASP攻防 —— RASP安全应用与局限性浅析...
  9. 修复MacBook Touch Bar(触控栏)无法正常工作的方法
  10. silverlight 加载大图片进度提示
  11. python题型大全_python进阶:练习题 汇总
  12. window自动备件软件
  13. 爱加密脱壳(持续更新)
  14. 时光里的魔术手小故事
  15. 代码:批量图片格式转换(jpg-png)
  16. 恐惧迷宫小游戏抖音快手超火
  17. 政府民航行业双获嘉奖,永洪科技做好行业数字化转型伙伴
  18. spring boot整合RabbitMQ —— 十分钟急速上手
  19. 常见C++开源库-几何算法库-Boost.Geometry-Clipper2-布尔运算库-支持开放式多段线-基础几何对象-详解教程
  20. RTKLIB-观测值文件

热门文章

  1. luogu P1646 happiness
  2. CentOS7使用yum安装MySQL5版本
  3. 朋友圈转发截图生成装逼工具源码
  4. 简易Lasso回归 R语言 变量含有分类变量处理
  5. 软件工程系列- 软件开发的可行性研究
  6. java 文本差异对比高亮工具(基于谷歌文本比对工具)
  7. 【BDTC 2016】与360、安天、三未信安、明朝万达、数字观星、观数科技共同讨论大数据安全与隐私保护...
  8. 河北专接本计算机2020年真题,2020年河北专接本考试公共课数(一)真题.pdf
  9. 可视化大数据大屏设计
  10. 前端面试常见问题和技术解决方案