jsr-303 参数校验-学习(转)

1、是什么?

JSR303 是一套 JavaBean 参数校验的标准,它定义了很多常用的校验注解,比如:
-------------------------------------------------
@NotNull(message="名字不能为空")
private String userName;
@Max(value=90,message="年龄不能超过90岁")
private int age;
@Email(message="邮箱格式错误")
private String email;
--------------------------------------------------
就像上边一样,把注解加在我们 JavaBean的 属性上面,就可以在需要校验的时候进行校验了。

2、误区(跟 hibernate orm 有关系)

JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation,官方参考实现是Hibernate Validator。
所以就认为他跟 Hibernate 有关系了...
但是,他真的一点关系都没有....
Hibernate Validator 只是 Bean Validation 的参考实现 , Hibernate Validator 提供了 JSR-303 规范中所有内置 constraint 的实现,除此之外还有一些附加的 constraint

3、依赖导入(spring-boot)

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
</dependency>

4、常用注解

4.1、空检查

@Null 验证对象是否为null
@NotNull 验证对象是否不为null, 无法查检长度为0的字符串
@NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
@NotEmpty 检查约束元素是否为NULL或者是EMPTY.

4.2、Booelan检查

@AssertTrue 验证 Boolean 对象是否为 true
@AssertFalse 验证 Boolean 对象是否为 false

4.3、长度检查

@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内
@Length(min=, max=) Validates that the annotated string is between min and max included.

4.4、日期检查

@Past 验证 Date 和 Calendar 对象是否在当前时间之前,验证成立的话被注释的元素一定是一个过去的日期
@Future 验证 Date 和 Calendar 对象是否在当前时间之后 ,验证成立的话被注释的元素一定是一个将来的日期
@Pattern 验证 String 对象是否符合正则表达式的规则,被注释的元素符合制定的正则表达式,regexp:正则表达式 flags: 指定 Pattern.Flag 的数组,表示正则表达式的相关选项。

4.5、数值检查

建议使用在Stirng,Integer类型,不建议使用在int类型上,因为表单值为“”时无法转换为int,但可以转换为Stirng为”“,Integer为null
@Min 验证 Number 和 String 对象是否大等于指定的值
@Max 验证 Number 和 String 对象是否小等于指定的值
@DecimalMax 被标注的值必须不大于约束中指定的最大值. 这个约束的参数是一个通过BigDecimal定义的最大值的字符串表示.小数存在精度
@DecimalMin 被标注的值必须不小于约束中指定的最小值. 这个约束的参数是一个通过BigDecimal定义的最小值的字符串表示.小数存在精度
@Digits 验证 Number 和 String 的构成是否合法
@Digits(integer=,fraction=) 验证字符串是否是符合指定格式的数字,interger指定整数精度,fraction指定小数精度。
@Range(min=, max=) 被指定的元素必须在合适的范围内
@Range(min=10000,max=50000,message=”range.bean.wage”)
@Valid 递归的对关联对象进行校验, 如果关联对象是个集合或者数组,那么对其中的元素进行递归校验,如果是一个map,则对其中的值部分进行校验.(是否进行递归验证)
@CreditCardNumber信用卡验证
@Email 验证是否是邮件地址,如果为null,不进行验证,算通过验证。
@ScriptAssert(lang= ,script=, alias=)
@URL(protocol=,host=, port=,regexp=, flags=)

5、案例分析

//5.1、实体 Bean
public class ValidateTestClass{@NotNull(message = "reason信息不可以为空")private String reason;//订单取消原因//get、set方法、有参构造方法、无参构造方法、toString方法省略
  ......
}

 

//5.2、control
public class ValidateTestClassValidateTest{@RequestBody@RequestMapping(value = "/test")public void addBook(@Valid ValidateTestClass validateTestClass,BindingResult result) {//备注:这里一个@Valid的参数后必须紧挨着一个BindingResult 参数,否则spring会在校验不通过时直接抛出异常if (result.hasErrors()){List<ObjectError> errorList = result.getAllErrors();for(ObjectError error : errorList){System.out.println(error.getDefaultMessage());}}}
}

 

转发地址:https://blog.csdn.net/qq_28867949/article/details/78922520

 

下一篇自定义校验:https://www.cnblogs.com/niceyoo/p/9497235.html

 

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

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

相关文章

URLEncoder 、URLDecoder 对中文转码解码使用

URLEncoder 、URLDecoder 转码解码使用 传递参数&#xff0c;转码传递 String encodeStr null; try { encodeStr URLEncoder.encode("aabb22中国", "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } System.out.pr…

SQLServer DBA 三十问(加强版)

SQLServer DBA 三十问&#xff08;加强版&#xff09; 原文链接&#xff1a;http://www.cnblogs.com/fygh/p/3288701.html距离最初发布SQLServer DBA 三十问 已有一年多了&#xff0c;大家对其中的某些问题讨论比较激烈&#xff0c;要回答出来这些问题需要比较扎实的SQLServer …

jsr-303 参数校验—自定义校验注解

1、为什么要自定义&#xff1f; 通过上篇学习&#xff0c;了解到很多常用注解了&#xff0c;但是呢&#xff0c;总是有那么些需求....2、案例分析(手机号格式) 2.1、需要验证的实体 Bean public class LoginVo {NotNullIsMobile //自定义的注解private String mobile;NotNullLe…

关于Apache Tomcat解决localhost was unable to start within 45 seconds

关于重装myeclipse启动服务超时问题解决方法&#xff1a; 1.打开安装或解压了Tomcat的根目录 &#xff08;1&#xff09;temp&#xff08;项目临时缓存文件&#xff09; 里面的文件全部删除&#xff0c;不要犹豫&#xff0c;这是之前在对项目进行操作的时候&#xff0c;所产生…

[译]SQL SERVER 2016 – Temporal Tables

原文 Temporal Table是SQL Server2016的新特性。能存储你表里面任意时间点的数据信息。 换句话说&#xff0c;如果你针对一张表执行任何更新或者删除操作&#xff0c;老数据会被新数据覆盖&#xff0c;下次查询的时候是查的最新的数据&#xff0c;但如果使用了temporal table你…

拦截器、过滤器、@Aspect 区别

1、需求场景 之前也有在文章写道 “拦截器\过滤器" 的区别&#xff0c;文章链接&#xff0c;在实际开发过程中&#xff0c;我们可能会遇到拦截请求参数的需求&#xff0c;在这我举个场景。某一个接口的请求参数都是加密的&#xff0c;而请求参中还有一些跟业务无关的数据&…

工作231:给input动态赋值

这个应该是不可以的&#xff0c;必须重新使用用文件对话框选择。 这是处于安全的考虑&#xff0c;不能直接对input typefile的类型赋值&#xff0c;因为直接用JS就可以将你本地文件直接取到指定地点&#xff0c;就没有安全性可言。 因此必须对一个input typefile设置一个按钮来…

MyEclipse2015Stable2.0安装破解

java开发者不可避免需要使用到的开发工具——myeclipse2015。下载安装直接打开使用的话&#xff0c;使用期为30天&#xff0c;之后如果没有注册吗注册&#xff0c;就使用不了了。即使卸载重装还是提示试用期期限超限&#xff0c;无法打开使用。 于是就有了破解myeclipse2015方…

laravel5.5中间件

目录 1. 中间件知识1. artisan 命令2. 文件内容3. 前置中间件和后置中间件4. 使用中间件2. 控制器中间件1. 中间件知识 1. artisan 命令 php artisan make:middleware CheckAge 2. 文件内容 <?phpnamespace App\Http\Middleware;use Closure;class CheckAge {public functi…

JAVA spring 常用包作用详解(转)

转载地址&#xff1a;https://www.cnblogs.com/Tmc-Blog/p/6093162.html <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http:…

关于HttpUrlConnection网络请求之返回结果的中文乱码解决方法

解决方法&#xff1a; 原使用 StringBuffer改为使用StringBuilder即可 /** * 获取响应码 200成功 * 当响应成功&#xff0c;获取响应的流 */ int res conn.getResponseCode(); if(res…

日志汇总:logging、logger

目录 1、日志输出到文件 2、日志输出到屏幕 3、设置输出等级 4、设置多个日志输出对象 5、日志的配置 6、记录异常 7、设置日志输出样式1、日志输出到文件basicConfig()提供了非常便捷的方式让你配置logging模块并马上开始使用。什么都不配置直接使用默认值在控制台中打log&…

1、jeecg 笔记开篇

1. 前言 终究还是入了 jeecg 的 "坑"&#xff0c;国庆后公司采用该框架开发&#xff0c;故开篇记录。 虽说入"坑"&#xff0c;但不得不承认 jeecg 确实是一个非常强大的平台。 其实近几年凡是知名的开源框架都是采用代码生成器了&#xff0c;所以 jeecg 同…

工作233:定义有对话框的按钮

<!--定义一个有按钮的对话框 相当于dialog和按钮组合使用--> <template><!-- 有按钮的对话框 这个位置的代码会被包裹过去--><!--close-on-click-modal 是否可以通过点击 modal 关闭 Dialog append-to-body控制不能出现遮挡层--><el-dialog:title&q…

Android 上传图片实例,java上传图片接口

1、完整上传图片代码方法&#xff1a; private static final int TIME_OUT 10*1000; //超时时间 private static final String CHARSET "utf-8"; //设置编码 /*** android上传文件到服务器* param file 需要上传的文件* param RequestURL 请求的rul* return …

数据库日期时间显示在页面上格式错误的解决方案

做项目过程中肯定会碰到这样一个问题&#xff1a;在数据库中存的是date或datetime类型的值&#xff0c;从数据库里取出来遍历到页面上显示的是long类型或是GTM类型的日期时间。对于这个问题&#xff0c;经过研究之后有以下结论&#xff1a; 1.hibernate不会出现这样的问题&…

2、jeecg 笔记之 t:dictSelect 或 t:dgCol 自定义字典

1、需求 先说一下需求场景吧&#xff0c;我们知道 jeecg 中提供了下拉&#xff0c;其中包含两种使用场景&#xff1b; 一种是直接通过 t:dictSelect 使用&#xff0c;再就是 t:dgCol 用于表头的列表工具条标签&#xff1b; 总之就是这个样子 需求来了&#xff0c;我们想要下拉…

工作234:按钮禁用

<!--定义一个有按钮的对话框 相当于dialog和按钮组合使用--> <template><!-- 有按钮的对话框 这个位置的代码会被包裹过去--><!--close-on-click-modal 是否可以通过点击 modal 关闭 Dialog append-to-body控制不能出现遮挡层--><el-dialog:title&q…

android动态切换logo和label

注&#xff1a;更新版本时。需换为默认的才可以更新apk android:enabled"true"为默认 1、准备资源 &#xff08;1&#xff09;logo和名称资源 <string name"app_name">httpheader</string> <string name"app_name1">第二名&…