#简介

JSR303是JAVA EE6中的子规范。用于对Java Bean的字段值进行校验,确保输入进来的数据在语义上是正确的,使验证逻辑从业务代码中脱离出来。JSR303是运行时数据验证框架,验证之后验证的错误信息会马上返回。有两个版本JSR303(BeanValidation1.0)和JSR349(BeanValidation1.1)。

javax.validation:validation-api:jar:1.1.0.Final

实现版本:

org.hibernate:hibernate-validator

org.apache.bval:bval-jsr303

jersery

注解

@NotNull | 引用类型 | 注解元素必须非空

@Null | 引用类型 |元素为空

@Digits | byte,short,int,long及其包装器,BigDecimal,BigInteger,String| 验证数字是否合法。属性:integer(整数部分), fraction(小数部分)

@Future/@Past| java.util.Date, java.util.Calendar | 是否在当前时间之后或之前

@Max/@Min | byte,short,int,long及其包装器,BigDecimal,BigInteger | 验证值是否小于等于最大指定整数值或大于等于最小指定整数值

@Pattern | String |验证字符串是否匹配指定的正则表达式。属性:regexp(正则), flags(选项,Pattern.Flag值)

@Size | String, Collection, Map, 数组 | 验证元素大小是否在指定范围内。属性:max(最大长度), min(最小长度), message(提示,默认为{constraint.size})

@DecimalMax/@DecimalMin | byte,short,int,long及其包装器,BigDecimal,BigInteger,String | 验证值是否小于等于最大指定小数值或大于等于最小指定小数值

@Valid | |验证值是否需要递归调用

@Null

@NotNull

@AssertFalse

@AssertTrue

@DecimalMax(value) 不大于value的数值

@DecimalMin(value) 不小于value的数值

@Digits(integer,fraction) 整数部分不超过integer,小数部分不超过fraction

@Future 将来的日期

@Past 过去的日期

@Max(value) 不大于value的数值

@Min(value) 不小于value的数值

@Pattern(value) 满足指定正则表达式

@Size(max,min) 长度在min到max之间

实现

引入pom文件

javax.el

javax.el-api

2.2.4

org.hibernate

hibernate-validator

5.1.3.Final

基础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.constraints.NotNull;

import javax.validation.groups.Default;

import org.hibernate.validator.constraints.NotEmpty;

/**

* 参数校验

*/

public class ValidatorUtil {

private static Validator validator = Validation.buildDefaultValidatorFactory().getValidator();

public static Map validate(T obj) {

Map errorMap = null;

Set> set = validator.validate(obj, Default.class);

if (set != null && set.size() > 0) {

errorMap = new HashMap();

String property = null;

for (ConstraintViolation 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);

}

}

}

return errorMap;

}

}

测试

public class MyBean {

@NotNull

private Long userId;

@NotEmpty

private String email;

public Long getUserId() {

return userId;

}

public void setUserId(Long userId) {

this.userId = userId;

}

public String getEmail() {

return email;

}

public void setEmail(String email) {

this.email = email;

}

}

public static void main(String[] args) {

MyBean bean = new MyBean();

Map map = ValidatorUtil.validate(bean);

System.out.println(map);

}

jsr 正则验证_Java数据校验(Bean Validation / JSR303)相关推荐

  1. jsr 正则验证_JSR-303 数据校验学习

    一.JSR-303简介 JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation,官方参考实现是Hibernate Validator. 此实现与 Hibernat ...

  2. Java数据校验(Bean Validation / JSR303)

    文档: http://beanvalidation.org/1.1/spec/ API : http://docs.jboss.org/hibernate/beanvalidation/spec/1. ...

  3. jsr 正则验证_使用 Bean Validation 解决业务中参数校验

    痛点及现状 代码中常常见到如下代码: if (Objects.equal(0L ,repertory)){ return ApiResultMap.errorResult(-1 ,"操作数量 ...

  4. 如何使用JSR 303 进行后台数据校验?

    文章目录 一.JSR 303 1.什么是 JSR 303? 2.为什么使用 JSR 303? 3.JSR 303 常见操作? 二.使用 JSR 303 相关注解处理逻辑 1.JSR 303 注解处理逻 ...

  5. jsr 正则验证_JSR303 验证

    www.cqdyr.com JSR303 验证 JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation ,官方参 考实现是 Hibernate Validator ...

  6. java 数据验证_Java 数据验证

    在web开发当前就会遇到一些数据有效性验证的相关代码编写. 一般的写法如: public class User { public String username; public String pass ...

  7. jsr 正则验证_使用JSR-303进行校验 @Valid

    一.在SringMVC中使用 使用注解 1.准备校验时使用的JAR validation-api-1.0.0.GA.jar:JDK的接口: hibernate-validator-4.2.0.Fina ...

  8. java qq验证_JAVA正则表达式校验qq号码的方法

    导读 正文 Java 正则表达式 正则表达式定义了字符串的模式. 正则表达式可以用来搜索.编辑或处理文本. 正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别. 正则表达式实例 一个字符串其 ...

  9. Bean Validation完结篇:你必须关注的边边角角(约束级联、自定义约束、自定义校验器、国际化失败消息...)【享学Spring】

    每篇一句 没有任何技术方案会是一种银弹,任何东西都是有利弊的 前言 一般来说,对于web项目我们都有必要对请求参数进行校验,有的前端使用JavaScript校验,但是为了安全起见后端的校验都是必须的. ...

最新文章

  1. 千亿级携程酒店AWS实践
  2. 使用xmlhttp结合asp,实现网页的异步调用_asp实例
  3. python中for和while区别_Python学习第九篇——while和for的区别
  4. mysql proxy 悲观锁_mysql悲观锁总结和实践
  5. 最大数输出(信息学奥赛一本通-T1053)
  6. 编译Android源码致命错误解决方案
  7. java集群之间共享数据_多个JVM之间,数据共享的问题?
  8. 四叶草启动引导配置工具 !Clover Configurator中文版下载!
  9. 《松本行弘的程序世界》读书笔记
  10. 100offer 为专业程序打造的招聘平台
  11. 加速区块链改革促进区域经济转型升级 ——中国·平泉负氧离子产业园正式落成
  12. 广州智能服务机器人展览会 | 2016人工智能展
  13. 程序员常用资源工具集合
  14. 【SQL自学打卡|DAY17】——多表查询
  15. MATLAB2018simulink打不开MATLAB2019b的simulink,低版本simulink模型出现
  16. html3d电子相册,3d电子相册制作软件
  17. 电磁兼容EMC详解及测试流程
  18. python实现鱼眼图与六面图的转换
  19. java图片转二进制
  20. 模仿成功者,才是最快的成功路径

热门文章

  1. WorldWind Java 版学习:1、启动过程
  2. Redhat的Linux产品版本AS/ES/WS的联系与区别
  3. Linux使用技巧15则
  4. mysql查询流程解析及重要知识总结
  5. 网络爬虫--11.XPath和lxml
  6. 背景宽高随文本变化_中科大提出ContourNet:更准确的任意形状场景文本检测新方法...
  7. 基本农田卫星地图查询_#重庆朝天门#谷歌百度腾讯高德“卫星地图”PK,谷歌更胜一筹...
  8. 深度学习之 SSD(Single Shot MultiBox Detector)
  9. 【分享】 codeReview 的重要性
  10. mysql5.7.x 1251_MySql-8.0.x免安装版下载与配置,Navicat打开数据库链接报错1251的解决办法...