jsr 正则验证_Java数据校验(Bean Validation / JSR303)

#简介

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);

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/467706.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

css 透明度使用

设置元素整体透明度: div{opacity: 0.5; } 设置背景色透明度 div{background: rgba(0,0,0,0.5); } 转载于:https://www.cnblogs.com/chenglj/p/7498107.html

深入理解Linux内核链表

之前写过的链表文章,再结合这篇,我觉得是一道硬菜。Linux内核链表C语言,链表大家五一节日快乐,我知道劳动节大家都辛苦了,吃点硬菜好顶住饿肚子~#一、 链表数据结构简介链表是一种常用的组织有序数据的数据结构&#x…

GAN

文章目录生成对抗网络(GAN)基础生成对抗网络 优点:缺点:生成对抗网络深度GANDCGAN结构细节特征研究DCGAN总结条件GAN模型结构INFOGANInfoGAN: 自动学习z中部分变量意义Wasserstein GANGAN存在问题原因WGAN特点改进方法:生成对抗网络(GAN)基础…

sql 查询统计最近7天,30天,1年的数据

统计最近7天每天的数据 第一个查询统计了最近7天内,每天创建的’WAIT_SEND’状态的订单数量。这是通过将当前日期向前推移6天(DATE_SUB(CURDATE(), INTERVAL 6 DAY))实现的。然后,它会按照创建日期对结果进行分组(GROU…

1200可以读取modbus tcp_S7-1200 作 MODBUS TCP服务器

S7-1200 Modbus TCP 通信指令块STEP 7 V13 SP1 软件版本中的Modbus TCP库指令目前最新的版本已升至V4.0,该版本的使用需要具备以下两个条件:1. 软件版本: STEP 7 V13 SP1及其以上2. 固件版本: S7-1200 CPU 的固件版本V4.1图1. Mod…

判断对象oStringObject是否为String

1.操作符 (1)typeof操作符 格式:resulttypeof variable 返回值: undefined 值未定义 boolean 布尔值 string 字符串 number 数值 object 对象、null function 函数 (2)instanceof操作符 格式:re…

Linux一定需要文件系统吗?

开篇题外话:对于Linux初学者来说,这是一个很纠结的问题,但这也是一个很关键的问题! 一语破天机:“尽管内核是 Linux 的核心,但文件却是用户与操作系统交互所采用的主要工具。这对 Linux 来说尤其如…

迁移学习

文章目录为什么需要迁移学习模型Fine-‐tune![在这里插入图片描述](https://img-blog.csdnimg.cn/20200612000845217.png)保守训练层迁移Multitask Learning渐进式神经网络/Progressive Neural Networks域对抗零样本学习Self-‐taught learning为什么需要迁移学习 使用深度学习…

RNA-Seq分析软件HTSeq的安装

1.本人刚开始安装的时候,先下载相关的软件包,然后安装installtion中的方法安装, 运行的时候老是报错。根据错误提示安装解决方法。也参考了其他的笔友的一些建议, 发现特别麻烦,后来无意中发现有小伙伴用bioconda来安装…

怎么撤回操作_微信又更新,拍一拍能撤回了

微信拍一拍功能在 6 月份刚上线时,「微信之父」张小龙就发朋友圈表示,微信史上仅需一行代码的有趣功能终于来了,拍一拍,像蚂蚁一样打招呼。拍一拍功能将大家在现实世界的肢体交流带到了虚拟世界,相信大家都有儿时和三俩…

吹牛

起了一个不太雅观的标题,我很想给我们的会晤起一个响亮的名字,比如「三方会谈」或者「新一代5.4事件」,再或者牛逼点的,我们可以叫「西乡起义」。好吧,我摊牌了,这次吃饭就是三个屌丝和一个大佬的闲暇吹牛&…

迁移学习实战

文章目录预处理网络模型的构建网络的训练网络模型的验证预处理 from __future__ import absolute_import from __future__ import division from __future__ import print_functionimport tensorflow as tffrom tensorflow.python.ops import control_flow_opsdef apply_with_…

Spring MVC-视图解析器(View Resolverr)-内部资源视图解析器(Internal Resource View Resolver)示例(转载实践)...

以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_internalresourceviewresolver.htm 说明:示例基于Spring MVC 4.1.6。 InternalResourceViewResolver用于将提供的URI解析为实际的URI。以下示例显示如何使用Spring Web MVC框架使用I…

手机是怎么确定位置信息的?

#手机是怎么定位的?定位是一个老生常谈的话题,最近几年还在讨论一个热点技术话题「室内定位」,从我知道这个技术到现在已经过了好几年了,也出现了一些室内定位的方案,而我们的手机是如何进行定位的,又有哪些…

tablestore列式存储原理_10分钟搞透:技术人必会的MySQL体系结构与存储引擎!

MySQL是目前使用最广的开源数据库,不管从装机量、使用人群、专职人员、社区发展,还是基于MySQL的其他分支,都是当之无愧的No.1。 本文将从以下4个方面,带你搞透MySQL体系结构与存储引擎。主要包括:1、MySQL数据库的体系…

使用Adobe Audition生成基本音频

#首先打开软件 #新建一个音频 #在效果菜单栏插入基本音频

viewpager 跳转到指定页面

viewPager.setCurrentItem(getUserIndex(userId)); seCurrentItem是定位到指定页面参数是position转载于:https://www.cnblogs.com/wmxl/p/7500647.html

vue里实现同步执行方法_vue中的watch方法 实时同步存储数据

RFID基础知识 BS:BinarySearch. TSA:TimeSlottedAloha. BSA:基本二进制搜索算法. DBSA:动态二进制搜索算法. RBSA:后退式二进制搜索算法. FSA:Frame Slo ... WampServer修改MySQL密码 WampServer安装后密码是空的,需要设置一下 一般有两种方式: 一是通过phpMyAdmin直接修改: 二…

更多网络类型

文章目录丰富网络类型CPPN孪生网络Triplet Network应用Variational Auto-encoder强化学习Markov decision processesBellman公式丰富网络类型 深度学习除了经典卷积神经网络,循环神经网络还有广泛的网络类型 CPPN 网络输入是像素坐标值(x,…

Tyvj1091

题目链接 分析: 最近做的区间dp挺多 最简单的:n^3枚举,显然TLE 其实有一个很显然的dp状态: f[i][j]表示结尾是i,j的等差数列的数量: f[i][j]Σ(f[k][j]1) (a[i]-a[j]a[j]-a[k]) 但是这样的复杂度也是…