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 数据校验相关推荐
- Go 语言编程 — validator 数据校验工具
目录 文章目录 目录 Validator Quick start 约束类型 特殊约束 格式约束 数据结构类型约束 范围约束 字符串约束 唯一性约束 跨字段约束 自定义约束 错误处理 中文错误信息 参考 ...
- 玩转 SpringBoot 2 快速整合 | RESTful Api 篇
概述 RESTful 是一种架构风格,任何符合 RESTful 风格的架构,我们都可以称之为 RESTful 架构.我们常说的 RESTful Api 是符合 RESTful 原则和约束的 HTTP ...
- SpringBoot 2 快速整合 RabbitMQ
前言 本文介绍了通过最简单方法使用 SpringBoot 2 整合 RabbitMQ,带你快速上手 RabbitMQ 的操作. 操作前需要先安装 RabbitMQ 服务.Windows 系统可以参考 ...
- 玩转 SpringBoot 2 快速整合 | JSP 篇
前言 JavaServer Pages(JSP)技术使Web开发人员和设计人员能够快速开发和轻松维护利用现有业务系统的信息丰富的动态Web页面.作为Java技术系列的一部分,JSP技术可以快速开发独立 ...
- elasticsearch 分页_[Springboot实战系列]整合ElasticSearch实现数据模糊搜索
前言 本文介绍了如何整合搜索引擎elasticsearch与springboot,对外提供数据查询接口. 业务介绍 我的个人网站需要对mysql数据库内存储的京东商品进行模糊查询(模仿淘宝商品搜索), ...
- 玩转 SpringBoot 2 快速整合 Filter 注解版
前言 本文主要介绍如何在SpringBoot 2 中使用 Filter 的快速搭建教程,阅读前需要你必须了解 Filter 的基础使用以及如何搭建 SpringBoot 项目. 快速演示操作 第一步: ...
- 玩转 SpringBoot 2 快速整合 Listener
前言 本文主要介绍如何在SpringBoot 2 中使用 Listener 的快速搭建教程,阅读前需要你必须了解 Listener 的基础使用以及如何搭建 SpringBoot 项目. 快速演示操作 ...
- 玩转 SpringBoot 2 快速整合 Servlet
前言 本文主要介绍如何在SpringBoot 2 中使用 Servlet 的快速搭建教程,阅读前需要你必须了解 Servlet 的基础使用以及如何搭建 SpringBoot 项目. 快速演示操作 第一 ...
- 玩转 SpringBoot 2 快速整合拦截器
概述 首先声明一下,这里所说的拦截器是 SpringMVC 的拦截器(HandlerInterceptor).使用SpringMVC 拦截器需要做如下操作: 创建拦截器类需要实现 HandlerInt ...
最新文章
- oracle dp命令的使用说明
- python断网还能用吗_室友打游戏时,让他断网掉线!明明没断网就是没网!Python黑客!...
- 461在全志r16平台tinav3.0系统下使用地磁计QMC5883L
- iscsi 同步_群晖六盘位旗舰NAS,一文教你如何解决多设备同步,跨平台协调
- ajax 定时请求mysql_PHPAjax请求MySQL数据库
- 幸福框架:可扩展的、动态的、万能的 编号生成器
- Hulu热招|广告智能团队
- python数据处理用什么软件_数据分析都会用到哪些工具?
- Dataframe处理速度测试
- js常用工具方法utils
- 八大处理器最强手机盘点 手机CPU混战(组图)
- 中国富豪的七条发家路--颇显中国特色
- 推荐:mysql锁 innodb下的记录锁,间隙锁,next-key锁
- 【离散数学】关于欧拉图与哈密顿图的讨论
- php trimarray,PHP trim()函数和array_unique()函数去重 【原创】
- Your password does not satisfy the current policy requirements
- at com.android.xiong.aysnctasktest.MainActivity$PageTask.onPostExecute(MainActivity.java:116)
- C与C++游戏项目练习1:弹跳的小球简易版
- hass智能 小米扫地机器人_搭建智能家居第三篇:小米系列接入homeassistant的教程分享...
- win10桌面打开疑难问题修复界面的方法
热门文章
- rpm安装mysql
- mysql数据库写入数据的语法_mysql数据库插入数据语法
- 为制造业构建Teams Power App 2:创建客户UI
- 依赖反转原理,IoC容器和依赖注入:第4部分
- 微软开始取消 Windows 10 对 32 位系统的支持
- F# 换“山头”啦!现已迁移到 .NET 名下
- 程序在发布前就应该发现的一些错误
- element table批量删除_element ui 批量删除
- 数字能排序字符串不能排序_动图解说堆排序原理,让体育生也能看得明白
- 单位阶跃信号是周期信号吗_vivoS7e是5G手机吗-支持5G吗-5G信号怎么样