hibernate-validate
hibernate-validate
刚才虽然实现了注册,但是服务端并没有进行数据校验,而前端的校验是很容易被有心人绕过的。所以我们必须在后台添加数据校验功能:
我们这里会使用Hibernate-Validator框架完成数据校验:
而SpringBoot的web启动器中已经集成了相关依赖:
什么是Hibernate Validator
Hibernate Validator是Hibernate提供的一个开源框架,使用注解方式非常方便的实现服务端的数据校验。
官网:http://hibernate.org/validator/
hibernate Validator 是 Bean Validation 的参考实现 。
Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint(约束) 的实现,除此之外还有一些附加的 constraint。
在日常开发中,Hibernate Validator经常用来验证bean的字段,基于注解,方便快捷高效。
Bean校验的注解
常用注解如下:
Constraint | 详细信息 |
---|---|
@Valid | 被注释的元素是一个对象,需要检查此对象的所有字段值 |
@Null | 被注释的元素必须为 null |
@NotNull | 被注释的元素必须不为 null |
@AssertTrue | 被注释的元素必须为 true |
@AssertFalse | 被注释的元素必须为 false |
@Min(value) | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 |
@Max(value) | 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 |
@DecimalMin(value) | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 |
@DecimalMax(value) | 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 |
@Size(max, min) | 被注释的元素的大小必须在指定的范围内 |
@Digits (integer, fraction) | 被注释的元素必须是一个数字,其值必须在可接受的范围内 |
@Past | 被注释的元素必须是一个过去的日期 |
@Future | 被注释的元素必须是一个将来的日期 |
@Pattern(value) | 被注释的元素必须符合指定的正则表达式 |
被注释的元素必须是电子邮箱地址 | |
@Length | 被注释的字符串的大小必须在指定的范围内 |
@NotEmpty | 被注释的字符串的必须非空 |
@Range | 被注释的元素必须在合适的范围内 |
@NotBlank | 被注释的字符串的必须非空 |
@URL(protocol=,host=, port=,regexp=, flags=) | 被注释的字符串必须是一个有效的url |
@CreditCardNumber | 被注释的字符串必须通过Luhn校验算法,银行卡,信用卡等号码一般都用Luhn计算合法性 |
给User添加校验
我们在leyou-user-interface
中添加Hibernate-Validator依赖:
<dependency><groupId>org.hibernate.validator</groupId><artifactId>hibernate-validator</artifactId>
</dependency>
我们在User对象的部分属性上添加注解:
@Table(name = "tb_user")
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@Length(min = 4, max = 30, message = "用户名只能在4~30位之间")private String username;// 用户名@JsonIgnore@Length(min = 4, max = 30, message = "密码只能在4~30位之间")private String password;// 密码@Pattern(regexp = "^1[35678]\\d{9}$", message = "手机号格式不正确")private String phone;// 电话private Date created;// 创建时间@JsonIgnoreprivate String salt;// 密码的盐值
}
在controller上进行控制
在controller中改造register方法,只需要给User添加 @Valid注解即可。
测试
我们故意填错:
然后SpringMVC会自动返回错误信息:
hibernate-validate相关推荐
- hibernate validate验证框架中@NotEmpty、@NotbBank、@NotNull的区别
Hibernate Validator验证框架中@NotEmpty.@NotBlank.@NotNull 的区别 Hibernate Validator验证框架中@NotEmpty.@NotBlank ...
- Springboot中优雅进行字段校验
欢迎关注方志朋的博客,回复"666"获面试宝典 前段时间提交代码审核,同事提了一个代码规范缺陷:参数校验应该放在controller层.到底应该如何做参数校验呢? | Contro ...
- 看看人家那后端API接口写得,那叫一个优雅!
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源:r6d.cn/tEvn 在移动互联网,分布式.微服务 ...
- Java 如何设计 API 接口,实现统一格式返回?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:老顾聊技术 前言 接口交互 返回格式 控制层Controll ...
- 如何优雅设计 API 接口,实现统一格式返回?
来源:老顾聊技术 前言 在移动互联网,分布式.微服务盛行的今天,现在项目绝大部分都采用的微服务框架,前后端分离方式, (题外话:前后端的工作职责越来越明确,现在的前端都称之为大前端,技术栈以及生态圈都 ...
- 计算机前后端接口,看看别人后端API接口写得,那叫一个优雅!
在分布式.微服务盛行的今天,绝大部分项目都采用的微服务框架,前后端分离方式.题外话:前后端的工作职责越来越明确,现在的前端都称之为大前端,技术栈以及生态圈都已经非常成熟:以前后端人员瞧不起前端人员,那 ...
- 拦截httpservlet返回码_设计 API 接口,实现统一格式返回
来源:老顾聊技术 前言 在移动互联网,分布式.微服务盛行的今天,现在项目绝大部分都采用的微服务框架,前后端分离方式.一般系统的大致整体架构图如下: 接口交互 前端和后端进行交互,前端按照约定请求URL ...
- 构建dubbo分布式平台-maven构建ant-framework框架的pom.xml文件配置
2019独角兽企业重金招聘Python工程师标准>>> 今天重点讲解的是ant-framework可信项目的构建过程. 其中ant-framework是ant分布式框架的基础核心框架 ...
- Spring Boot 进行优雅的字段校验,写得太好了!
作者 | 何甜甜在吗 来源 | juejin.cn/post/6913735652806754311 前段时间提交代码审核,同事提了一个代码规范缺陷:参数校验应该放在controller层.到底应该如 ...
- 深入浅出 SpringMVC - 2 提升篇
原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7697738.html 前言: 本篇笔记是继 深入浅出 SpringMVC - 1 后的续篇,主 ...
最新文章
- 中国程序员最容易发音错误的单词
- Java实现话术词槽匹配_桔子互动|百度UNIT操作详解(上篇)
- 【学习笔记】32、字符串格式化
- Linux:centos释放缓存,查看磁盘空间大小,xxx文件夹, 查看文件夹大小,查看剩余内存,查看xxx软件位置,统计某文件夹,统计某文件夹下目录数量,查看文件夹大小,给文件夹下所有的文件赋值权限
- 如何才能学好单片机?​
- 应广单片机adc_应广PMC232系列单片机 12位ADC PWM LCD 双核心8位MCU
- iOS 直播推流 - 搭建基于RTMP的本地Nginx服务器
- JavaEE基础(05):过滤器、监听器、拦截器,应用详解
- 贝叶斯分层回归模型的推理、EM求解和Java编程
- Unity3D基础5:摄像机与Game视图
- 【ATSC】美国地面数字电视广播从ATSC 1.0向ATSC 3.0标准的过渡
- Opencv求轮廓的中心点坐标
- ×××网站与***的秘密
- 辽宁 viewpro.php,辽宁省策划学会赴沙地沟村考察
- MySql查询优化性能调优,sql性能自测方法,及Mysql索引介绍
- windows 安装python3 Eclipse 配置python插件
- Centos7 ceph集群安装 cephfs客户端挂载 java代码调用
- TortoiseSVN 忽略 Maven 项目的 target 目录
- 常见的滚动widget
- 三星 9810 android 9,三星S9双版本对比:骁龙845碾压Exynos 9810
热门文章
- 算法笔记_028:字符串转换成整数(Java)
- java中redis实现篇
- JAVA字符串格式化-String.format()使用
- 【编程题目】输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。...
- delphi7下调用微软的Web Services的心得
- 热门的“挑战视频”,凭什么火起来的?
- 云栖社区Ruby技术社群建立啦!大家都想听什么?...
- 饿了么CTO张雪峰:允许90后的技术人员“浮躁“一点
- mysql三:表操作
- jenkins无法安装插件问题