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) 被注释的元素必须符合指定的正则表达式
@Email 被注释的元素必须是电子邮箱地址
@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相关推荐

  1. hibernate validate验证框架中@NotEmpty、@NotbBank、@NotNull的区别

    Hibernate Validator验证框架中@NotEmpty.@NotBlank.@NotNull 的区别 Hibernate Validator验证框架中@NotEmpty.@NotBlank ...

  2. Springboot中优雅进行字段校验

    欢迎关注方志朋的博客,回复"666"获面试宝典 前段时间提交代码审核,同事提了一个代码规范缺陷:参数校验应该放在controller层.到底应该如何做参数校验呢? | Contro ...

  3. 看看人家那后端API接口写得,那叫一个优雅!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源:r6d.cn/tEvn 在移动互联网,分布式.微服务 ...

  4. Java 如何设计 API 接口,实现统一格式返回?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:老顾聊技术 前言 接口交互 返回格式 控制层Controll ...

  5. 如何优雅设计 API 接口,实现统一格式返回?

    来源:老顾聊技术 前言 在移动互联网,分布式.微服务盛行的今天,现在项目绝大部分都采用的微服务框架,前后端分离方式, (题外话:前后端的工作职责越来越明确,现在的前端都称之为大前端,技术栈以及生态圈都 ...

  6. 计算机前后端接口,看看别人后端API接口写得,那叫一个优雅!

    在分布式.微服务盛行的今天,绝大部分项目都采用的微服务框架,前后端分离方式.题外话:前后端的工作职责越来越明确,现在的前端都称之为大前端,技术栈以及生态圈都已经非常成熟:以前后端人员瞧不起前端人员,那 ...

  7. 拦截httpservlet返回码_设计 API 接口,实现统一格式返回

    来源:老顾聊技术 前言 在移动互联网,分布式.微服务盛行的今天,现在项目绝大部分都采用的微服务框架,前后端分离方式.一般系统的大致整体架构图如下: 接口交互 前端和后端进行交互,前端按照约定请求URL ...

  8. 构建dubbo分布式平台-maven构建ant-framework框架的pom.xml文件配置

    2019独角兽企业重金招聘Python工程师标准>>> 今天重点讲解的是ant-framework可信项目的构建过程. 其中ant-framework是ant分布式框架的基础核心框架 ...

  9. Spring Boot 进行优雅的字段校验,写得太好了!

    作者 | 何甜甜在吗 来源 | juejin.cn/post/6913735652806754311 前段时间提交代码审核,同事提了一个代码规范缺陷:参数校验应该放在controller层.到底应该如 ...

  10. 深入浅出 SpringMVC - 2 提升篇

    原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7697738.html 前言: 本篇笔记是继 深入浅出 SpringMVC - 1 后的续篇,主 ...

最新文章

  1. 中国程序员最容易发音错误的单词
  2. Java实现话术词槽匹配_桔子互动|百度UNIT操作详解(上篇)
  3. 【学习笔记】32、字符串格式化
  4. Linux:centos释放缓存,查看磁盘空间大小,xxx文件夹, 查看文件夹大小,查看剩余内存,查看xxx软件位置,统计某文件夹,统计某文件夹下目录数量,查看文件夹大小,给文件夹下所有的文件赋值权限
  5. 如何才能学好单片机?​
  6. 应广单片机adc_应广PMC232系列单片机 12位ADC PWM LCD 双核心8位MCU
  7. iOS 直播推流 - 搭建基于RTMP的本地Nginx服务器
  8. JavaEE基础(05):过滤器、监听器、拦截器,应用详解
  9. 贝叶斯分层回归模型的推理、EM求解和Java编程
  10. Unity3D基础5:摄像机与Game视图
  11. 【ATSC】美国地面数字电视广播从ATSC 1.0向ATSC 3.0标准的过渡
  12. Opencv求轮廓的中心点坐标
  13. ×××网站与***的秘密
  14. 辽宁 viewpro.php,辽宁省策划学会赴沙地沟村考察
  15. MySql查询优化性能调优,sql性能自测方法,及Mysql索引介绍
  16. windows 安装python3 Eclipse 配置python插件
  17. Centos7 ceph集群安装 cephfs客户端挂载 java代码调用
  18. TortoiseSVN 忽略 Maven 项目的 target 目录
  19. 常见的滚动widget
  20. 三星 9810 android 9,三星S9双版本对比:骁龙845碾压Exynos 9810

热门文章

  1. 算法笔记_028:字符串转换成整数(Java)
  2. java中redis实现篇
  3. JAVA字符串格式化-String.format()使用
  4. 【编程题目】输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。...
  5. delphi7下调用微软的Web Services的心得
  6. 热门的“挑战视频”,凭什么火起来的?
  7. 云栖社区Ruby技术社群建立啦!大家都想听什么?...
  8. 饿了么CTO张雪峰:允许90后的技术人员“浮躁“一点
  9. mysql三:表操作
  10. jenkins无法安装插件问题