java JSR303 参数验证
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 参数验证相关推荐
- java 接口参数验证_SpringBoot实现通用的接口参数校验
作者:cipher 来源:http://39sd.cn/560BA 本文介绍基于Spring Boot和JDK8编写一个AOP,结合自定义注解实现通用的接口参数校验. 缘由 目前参数校验常用的方法是在 ...
- java validation_java bean validation 参数验证
一.前言 在后台开发过程中,对参数的校验成为开发环境不可缺少的一个环节.比如参数不能为null,email那么必须符合email的格式,如果手动进行if判断或者写正则表达式判断无意开发效率太慢,在时间 ...
- java后台验证不能为空_java validation 后台参数验证的使用详解
一.前言 在后台开发过程中,对参数的校验成为开发环境不可缺少的一个环节.比如参数不能为null,email那么必须符合email的格式,如果手动进行if判断或者写正则表达式判断无意开发效率太慢,在时间 ...
- jsr303 spring_使用Spring和JSR 303进行方法参数验证
jsr303 spring Spring提供了一种使用JSR 303 bean验证来验证方法参数的简便方法. 在这篇文章中,我们将看到如何使用此功能. 建立 首先,我们需要通过创建MethodVali ...
- 参数验证 @Validated 和 @Valid 的区别,Java Web 开发必备。
Spring Validation验证框架对参数的验证机制提供了@Validated(Spring's JSR-303 规范,是标准 JSR-303 的一个变种),javax提供了@Valid(标准J ...
- SpringBoot-服务端参数验证-JSR-303验证框架
1. springboot 默认集成了 hibernate-validator,它默认是生效的,可以直接使用. 比如: @RestController @RequestMapping("/h ...
- Dubbo -- 系统学习 笔记 -- 示例 -- 参数验证
Dubbo -- 系统学习 笔记 -- 目录 示例 想完整的运行起来,请参见:快速启动,这里只列出各种场景的配置方式 参数验证 参数验证功能是基于JSR303实现的,用户只需标识JSR303标准的验证 ...
- 面试:说说参数验证 @Validated 和 @Valid 的区别?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | blog.csdn.net/qq_276803 ...
- Spring Validation验证框架参数验证 @Validated 和 @Valid 的区别
参数验证 @Validated 和 @Valid 的区别 Spring Validation验证框架对参数的验证机制提供了@Validated(Spring's JSR-303 规范,是标准 JSR- ...
最新文章
- 360金融翟政:科技成就金融场景零容错
- 帆软css修改按钮立体,FineReport 控件的 CSS 样式
- tableau必知必会之轻松搞定 关系网 图表
- 计算机无法加电,计算机无法加电是何故?
- 机器学习的数学,从入门到不放弃(文末彩蛋)
- dos debug命令
- oracle 表更新表,Oracle 更新表(另一张表)
- 对没有标记为安全的activex控件进行初始化和脚本运行_RASP攻防 —— RASP安全应用与局限性浅析...
- 修复MacBook Touch Bar(触控栏)无法正常工作的方法
- silverlight 加载大图片进度提示
- python题型大全_python进阶:练习题 汇总
- window自动备件软件
- 爱加密脱壳(持续更新)
- 时光里的魔术手小故事
- 代码:批量图片格式转换(jpg-png)
- 恐惧迷宫小游戏抖音快手超火
- 政府民航行业双获嘉奖,永洪科技做好行业数字化转型伙伴
- spring boot整合RabbitMQ —— 十分钟急速上手
- 常见C++开源库-几何算法库-Boost.Geometry-Clipper2-布尔运算库-支持开放式多段线-基础几何对象-详解教程
- RTKLIB-观测值文件