Spring boot validation校验
使用 Hibernate validator 的步骤:
1. 在 Pojo 类的字段上, 加上 Hibernate validator 注解
2. 在Controller 函数的形参前加上 @Valid 或 @Validated 注解, 触发一次validation.
3. 在每个 @Valid 或 @Validated 注解参数后, 紧跟一个 BindingResult 类型的参数. 如果没有提供对应的 BindingResult 参数, Spring MVC 将抛出异常.
4. 在Controller 函数中, 通过 BindingResult 类型的参数获取检验的结果.
@Null 被注释的元素必须为 null
@NotNull 被注释的元素必须不为 null
@NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
@NotEmpty 检查约束元素不能为NULL或者是EMPTY.
@AssertTrue 被注释的元素必须为 true
@AssertFalse 被注释的元素必须为 false
@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max, min) 注释的元素的长度必须在指定的范围内, 支持字符串和集合
@Length(min=, max=) 被注释的字符串的大小必须在指定的范围内
@Email 被注释的元素必须是电子邮箱地址
@Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
@Range(min=, max=) 被注释的元素必须在合适的范围内
@Past 被注释的元素必须是一个过去的日期
@Future 被注释的元素必须是一个将来的日期
@Pattern(value) 被注释的元素必须符合指定的正则表达式
@URL(protocol=,
host=, port=,
regexp=, flags=) 被注释的字符串必须是一个有效的url
@CreditCardNumber 被注释的字符串必须通过Luhn校验算法,
银行卡,信用卡等号码一般都用Luhn
计算合法性
@Valid 和 @Validated 注解
====================================
@Valid 和 @Validated 都用来触发一次校验, @Valid 是 JSR 303规范的注解, @Validated 是Spring 加强版的注解, 加强的地方有:
@Validated 支持组序列, 该特性用的较少,所以, 推荐使用 @Validated 注解.
pom.xml
----------------------------------
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
POJO 类
----------------------------------
public class Book {
@Null(message = "bookId should be null when add", groups = { AddEntity.class })
@NotNull(message = "bookId should be not null when update and delete", groups = { UpdateEntity.class, DeleteEntity.class })
private Integer bookId;
private String author;
public Integer getBookId() {
return bookId;
}
public void setBookId(Integer bookId) {
this.bookId = bookId;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
}
Controller 类
----------------------------------
@RestController
@RequestMapping("/bookApi")
class BookController {
// 新增操作
// Book 参数要加上 @RequestBody
// book 参数加上 @Validated 验证指令
@PostMapping("/books")
public Book addBook(@Validated({ AddEntity.class }) @RequestBody Book book, BindingResult bookBinding) {
if (bookBinding.hasErrors()) {
List<ObjectError> errors = bookBinding.getAllErrors();
errors.stream()
.map(e -> e.getObjectName() + "," + e.getDefaultMessage())
.forEach(System.out::println);
return null;
}
book.setBookId(100);
return book;
}
// 更新操作
@PutMapping("/books/{bookId}")
public Book updateBook(@Validated({ UpdateEntity.class }) @RequestBody Book book, BindingResult bookBinding) {
if (bookBinding.hasErrors()) {
List<ObjectError> errors = bookBinding.getAllErrors();
errors.stream()
.map(e -> e.getObjectName() + "," + e.getDefaultMessage())
.forEach(System.out::println);
return null;
}
return book;
}
// list all 操作
@GetMapping("/books")
public List<Book> listBooks() {
List<Book> books = new ArrayList<Book>();
Book book;
book = new Book();
book.setBookId(20);
books.add(book);
return books;
}
}
参考:https://www.cnblogs.com/harrychinese/p/SpringBoot_pojo_validation.html
实体类在属性上常用的注解有
@NotEmpty(message="姓名不能为空")
private String name;
@NotEmpty(message="密码不能为空")
@Length(min=6,message="密码长度不能小于6位")
@size (min=3, max=20, message="用户名长度只能在3-20之间")
@size (min=6, max=20, message="密码长度只能在6-20之间")
@pattern (regexp="[a-za-z0-9._%+-]+@[a-za-z0-9.-]+\\.[a-za-z]{2,4}", message="邮件格式错误")
@Length(min = 5, max = 20, message = "用户名长度必须位于5到20之间")
@Email(message = "比如输入正确的邮箱")
@NotNull(message = "用户名称不能为空")
@Max(value = 100, message = "年龄不能大于100岁")
@Min(value= 18 ,message= "必须年满18岁!" )
@AssertTrue(message = "bln4 must is true")
@AssertFalse(message = "blnf must is falase")
@DecimalMax(value="100",message="decim最大值是100")
DecimalMin(value="100",message="decim最小值是100")
@NotNull(message = "身份证不能为空")
@Pattern(regexp="^(\\d{18,18}|\\d{15,15}|(\\d{17,17}[x|X]))$", message="身份证格式错误")
Spring boot validation校验的更多相关文章
- spring boot输入数据校验(validation)
Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...
- spring boot validation参数校验
对于任何一个应用而言在客户端做的数据有效性验证都不是安全有效的,这时候就要求我们在开发的时候在服务端也对数据的有效性进行验证. Spring Boot自身对数据在服务端的校验有一个比较好的支持,它能将 ...
- Spring Boot 参数校验
1.背景介绍 开发过程中,后台的参数校验是必不可少的,所以经常会看到类似下面这样的代码 这样写并没有什么错,还挺工整的,只是看起来不是很优雅而已. 接下来,用Validation来改写这段 2.Spr ...
- Validated 注解完成 Spring Boot 参数校验
1. @Valid 和 @Validated @Valid 注解,是 Bean Validation 所定义,可以添加在普通方法.构造方法.方法参数.方法返回.成员变量上,表示它们需要进行约束校验. ...
- 59. Spring Boot Validator校验【从零开始学Spring Boot】
大纲: (1) 入门例子: (2) 国际化: (3) 在代码中添加错误信息: (1) 入门例子: Validator主要是校验用户提交的数据的合理性的,比如是否为空了,密码长度是否大于6位,是否是纯数 ...
- Spring Boot (一) 校验表单重复提交
一.前言 在某些情况下,由于网速慢,用户操作有误(连续点击两下提交按钮),页面卡顿等原因,可能会出现表单数据重复提交造成数据库保存多条重复数据. 存在如上问题可以交给前端解决,判断多长时间内不能再次点 ...
- Spring Boot Validation,既有注解不满足,我是怎么暴力扩展validation注解的
前言 昨天,我开发的代码,又收获了一个bug,说是界面上列表查询时,正常情况下,可以根据某个关键字keyword模糊查询,后台会去数据库 %keyword%查询(非互联网项目,没有使用es,只能这样了 ...
- Spring Boot参数校验
1. 概述 作为接口服务提供方,非常有必要在项目中加入参数校验,比如字段非空,字段长度限制,邮箱格式验证等等,数据校验常用到概念:JSR303/JSR-349: JSR303是一项标准,只提供规范不提 ...
- spring之validation校验
对于任何一个应用而言在客户端做的数据有效性验证都不是安全有效的,这时候就要求我们在开发的时候在服务端也对数据的有效性进行验证.SpringMVC自身对数据在服务端的校验有一个比较好的支持,它能将我们提 ...
随机推荐
- Windows平台查看端口占用的程序
一.方法:管理员权限打开Cmd窗口:netstat -obna
- 关于Storm 中Topology的并发度的理解
来自:https://storm.apache.org/documentation/Understanding-the-parallelism-of-a-Storm-topology.html htt ...
- SHOW INDEXES
SHOW INDEXES FROM user \G Table: user Non_unique: 1 [1表示包含重复值,0表示不包含.] Key_name: indsum_3id Seq_in_i ...
- ViewPage+frament不预载入下一个Frament数据解决的方法
在做一个ViewPage+Frament 滑动数效果,当滑动到每一页时载入哪一页的数据,可是ViewPage会预载入下一也数据.这个问题之前做项目是一直未解决,今天找到一个方法一下子就解决的这个问题, ...
- jqGrid遍历所有行及获取某一行数据
$("#gridTable").find("tbody tr").not(".jqgfirstrow").each(function (i) ...
- BIEE11G配置Oracle 12c数据源
方法一:直接在连接池中输入连接信息 将tnsname.ora里配置的连接信息等号后面的字符串去掉空格和换行符即可) (DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)( ...
- 9、redis之事务2-Jedis的八种调用方式(事务、管道、分布式)介绍
1.普通同步 @Test public void test1Normal() { Jedis jedis = new Jedis("localhost"); long start ...
- redhat7.0安装ifconfig
问题描述: Setup is unable to find the "ifconfig" program on your machine. Please make sure it ...
- Arduino的光敏传感器和超声波测距传感器测试代码
光敏传感器测试代码 使用的是一个未知名4pin模块, 4pin依次为Vcc, Gnd, DO, AO, 板载一个可调电阻以及一个LED, 调节电阻大小, 可以控制LED亮灭和DO输出变化对光亮的灵敏度 ...
- ssm(spring mvc+mybatis)+netty4开发qiq
发布时间:2018-10-30 技术:spring mvc+mybatis+nett4+layui 概述 简单快捷的IM方案,快速打造在线IM,可用于公司内网.外网通讯,客服系统等,实现了so ...