SpringBoot 2 快速整合 | Hibernate Validator 数据校验
概述
在开发RESTFull API 和普通的表单提交都需要对用户提交的数据进行校验,例如:用户姓名不能为空,年龄必须大于0 等等。这里我们主要说的是后台的校验,在 SpringBoot 中我们可以通过使用 Hibernate Validator 来进行后台的数据校验的。
闲话少说!接下来就开始介绍如何使用 Hibernate Validator 来进行数据的校验。
Hibernate Validator 实战操作
我们在添加用户的功能基础上来进行改造。
用户Model类代码如下:
public class User {
private String name;
private Integer age;
//省略get and set 方法
}
用户Controller代码如下:
@RequestMapping(value = "",method = RequestMethod.POST)
public void add(User user){
log.info("添加用户成功:"+"name:{},age:{}",user.getName(),user.getAge());
}
第一步我们先在 User 类上添加校验的注解,具体代码如下:
public class User {
@NotEmpty(message="请输入您的名称!")
private String name;
@Max(value = 100, message = "年龄必须在20-100之间!")
@Min(value= 20 ,message= "年龄必须在20-100之间!" )
private Integer age;
..省略get 和set 方法
}
我们来大致说明一下 注解的含义:
- 注解中message : 如果字段信息和检验规则不符合提示的错误信息。
- 注解中的value: 表示字段信息限定的值。
- @NotEmpty : 表示name 变量不能为空。
- @Max: 表示年龄的最大值是多少。
- @Min: 表示年龄的最小值是多少。
第二步就是对用户添加方法进行改造
用户添加方法中的 User 参数需要声明 @Valid 注解,添加该注解主要是指定要校验的参数实例,然后在添加用户方法中添加 BindingResult 参数。
BindingResult:主要是存储校验结果的数据,我们可以通过 BindingResult 来判断校验是否通过和获取校验错误提示信息。
具体代码如下:
@PostMapping()
public User add(@Valid User user,BindingResult bindingResult){
if(bindingResult.hasErrors()) {
String defaultMessage = bindingResult.getFieldError().getDefaultMessage();
System.out.println(defaultMessage);
return null;
}
log.info("springboot添加用户成功:"+"name:{},age:{}",user.getName(),user.getAge());
return user;
}
测试:
这里测试使用的是谷歌的一个插件工具:Advanced REST client 来完成的,你也可以选择你顺手的工具进行测试。
测试用户名称为空的情况:

后台日志输出如下:

测试年龄不在20到100 的数据 :

后台日志输出如下:

Hibernate Validator详细介绍
Hibernate Validator 是 实现JSR349的校验框架,他默认提供已经定义好的校验注解,我们经常使用的大致如下:
- @NotNull: 校验字段是否为空
- @NotEmpty: 校验数组集合map是否为空并且元素大于0
- @Max(value=): 限定指端的最大值
- @Min(value=): 限定字段的最小值
- @Size(min=, max=): 校验集合map元素数量的范围
- @Range(min=, max=): 校验数组String或者数据区间范围
- @Email: 校验字段是否是邮箱
- @Past: 校验是否是一个过期的日期
- @NotBlank: 校验字符串是否非空 即 !=null&& equals("")
- @Valid: 声明要校验数据的类参数
SpringBoot 2 快速整合 | Hibernate Validator 数据校验的更多相关文章
- SpringMVC--使用hibernate validator数据校验
JSR 303 Spring3开始支持JSR 303 验证框架,JSR303是Java为Bean数据合法性校验所提供的标准框架.JSR 303 支持XML和注解风格的验证,通过在Bean属性上标注类似 ...
- Hibernate Validator数据校验框架常用注释
使用前先配置maven,加入依赖: <dependency> <groupId>org.hibernate</groupId> <artifactId> ...
- Spring Boot 整合Hibernate Validator
Spring Boot 整合Hibernate Validator 依赖 <dependencies> <dependency> <groupId>org.spri ...
- 使用Springboot + Gradle快速整合Mybatis-Plus
使用Springboot + Gradle快速整合Mybatis-Plus 作者:Stanley 罗昊 [转载请注明出处和署名,谢谢!] MyBatis-Plus(简称 MP)是一个 MyBatis ...
- SpringBoot整合Hibernate Validator实现参数验证功能
在前后端分离的开发模式中,后端对前端传入的参数的校验成了必不可少的一个环节.但是在多参数的情况下,在controller层加上参数验证,会显得特别臃肿,并且会有许多的重复代码.这里可以引用Hibern ...
- [SpringBoot] - 配置文件的多种形式及JSR303数据校验
Springboot配置文件: application.yml application.properties(自带) yml的格式写起来稍微舒服一点 在application.properties ...
- Hibernate Validator参数校验
日常开发中经常会遇到需要参数校验的情况,比如某个字段不能为空.长度不能超过5等都属于参数校验的范围.对于简单的参数校验通过写几个if-else判断语句就搞定,但是对于复杂的多个参数校验的情况,就不是那 ...
- hibernate validator自定义校验注解以及基于服务(服务组)的校验
hibernate validator是Bean Validation 1.1 (JSR 349) Reference Implementation,其广泛的应用在mvc的参数校验中,尤其是使用服务端 ...
- maven validator数据校验
1.maven文件中添加依赖包 <!-- validator校验--> <dependency> <groupId>org.hibernate</groupI ...
随机推荐
- Java虚拟机(一)-Java内存区域
通过看深入理解java虚拟机这本书,大致总结一些笔记,或者提出一些问题,希望大家深入交流学习,第一次写博客,大家多多支持 Java虚拟机对于很多Java开发人员每天都在用,但是大部分人初学者对这些并不 ...
- Vue 中使用 typescript
Vue 中使用 typescript 什么是typescript typescript 为 javaScript的超集,这意味着它支持所有都JavaScript都语法.它很像JavaScript都强类 ...
- 基于jmeter+perfmon的稳定性测试记录
1. 引子 最近承接了项目中一些性能测试的任务,因此决定记录一下,将测试的过程和一些心得收录下来. 说起来性能测试算是软件测试行业内,有些特殊的部分.这部分的测试活动,与传统的测试任务差别是比较大的, ...
- Powered by .NET Core 进展:第5次发布尝试(Windows部署)
(图注:Windows 自带的性能监控,红色表示 CPU 占用,绿色表示 QPS) 今天中午 12:30 左右,我们进行了 .NET Core 博客站点的第5次发布(页脚会显示"Powere ...
- python+unittest框架第二天unittest之简单认识Test Suite:测试套件
今天了解下测试套件Test Suite,什么是测试套件,测试套件是由多个Test Case测试用例组成的,当然也可以由多个子测试套件组成. 接下来看下如果构建测试套件,构建测试套件的方法: 1.用un ...
- Java虚拟机日志与参数
虚拟机日志 打印GC日志可以使用参数-XX:+PrintGC /** * -Xmx10m -Xms10m -XX:PretenureSizeThreshold=10485760 * -XX:+Prin ...
- (三十九)c#Winform自定义控件-面包屑导航
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. 开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control ...
- [HEOI2013]SAO(树上dp,计数)
[HEOI2013]SAO (这写了一个晚上QAQ,可能是我太蠢了吧.) 题目说只有\(n-1\)条边,然而每个点又相互联系.说明它的结构是一个类似树的结构,但是是有向边连接的,题目问的是方案个数,那 ...
- Spark基本函数学习
package cn.itcast.spark.czh import org.apache.spark.{SparkConf, SparkContext} object TestFun { def m ...
- (五十)c#Winform自定义控件-滑块
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kwwwvagaa/NetWinformControl 码云:ht ...