后台校验有很多的工具,最开始用的是@Valid,这个是比较简单的,不支持分组校验。
Spring用@Validated对@Valid进行了封装,这样就满足了分组校验。
其实就是增加了一个group来对校验规则进行分组,然后再@Validated中指定group来校验。

  1. 分组
@Data
public class UserModel {@NotNull(message = "{id.empty}", groups = { FirstGroup.class })private int id;@NotNull(message = "{username.empty}", groups = { FirstGroup.class, SecondGroup.class })private String username;@NotNull(message = "{content.empty}", groups = { FirstGroup.class, SecondGroup.class })private String content;}
// 分组1
public interface FirstGroup {}
// 分组2
public interface SecondGroup{}// 通过Group对校验进行分组
@RequestMapping(value = "/save.action", method = RequestMethod.POST)
public String save(@Validated( { SecondGroup.class }) UserModel userModel, BindingResult result) {if (result.hasErrors()) {return "validate/error";}return "redirect:/success";
}@RequestMapping(value = "/update.action", method = RequestMethod.POST)
public String update(@Validated( { FirstGroup .class, SecondGroup.class }) UserModel user, BindingResult result) {if (result.hasErrors()) {return "validate/error";}return "redirect:/success";
}

有的时候,我们对一个实体类需要有多中验证方式,在不同的情况下使用不同验证方式,比如说对于一个实体类来的id来说,保存的时候是不需要的,对于更新时是必须的,可以如下配置:

  1. 分组

默认情况下,不同组别的约束验证是无序的,然而在某些情况下,约束验证的顺序却很重要,如下面两个例子:(1)第二个组中的约束验证依赖于一个稳定状态来运行,而这个稳定状态是由第一个组来进行验证的。(2)某个组的验证比较耗时,CPU 和内存的使用率相对比较大,最优的选择是将其放在最后进行验证。因此,在进行组验证的时候尚需提供一种有序的验证方式,这就提出了组序列的概念。

一个组可以定义为其他组的序列,使用它进行验证的时候必须符合该序列规定的顺序。在使用组序列验证的时候,如果序列前边的组验证失败,则后面的组将不再给予验证。

下例中声明了组 GroupA.class,GroupB.class 和 Group.class,其中 default,GroupA,GroupB 均为 Group 的序列。

// 分组都是接口
@GroupSequence( { Default.class, GroupA.class, GroupB.class })
public interface Group {}public interface GroupA {}public interface GroupB {}

通过 groups 对验证进行分组

// 校验实体类对象属性不为空
public class User {@NotEmpty(message = "firstname can't be empty")private String firstname;@NotEmpty(message = "middlename can't be empty", groups = Default.class)private String middlename;@NotEmpty(message = "lastname can't be empty", groups = GroupA.class)private String lastname;@NotEmpty(message = "country can't be empty", groups = GroupB.class)private String country;
}@RequestMapping(value = "/update.action", method = RequestMethod.POST)
public String register(@Validated(Group.class) User user, BindingResult result) {if (result.hasErrors()) {return "校验失败";}return "校验成功";
}

@Validated规则校验和校验分组Group相关推荐

  1. java分组校验_SpringBoot @Validated注解实现参数分组校验的方法实例

    前言 在前后端分离开发的时候我们需要用到参数校验,前端需要进行参数校验,后端接口同样的也需要,以防传入不合法的数据. 1.首先还是先导包,导入pom文件. org.springframework.bo ...

  2. element form自定义校验_SpringBoot分组校验及自定义校验注解

    前言   在日常的开发中,参数校验是非常重要的一个环节,严格参数校验会减少很多出bug的概率,增加接口的安全性.在此之前写过一篇SpringBoot统一参数校验主要介绍了一些简单的校验方法.而这篇则是 ...

  3. Validated数据校验,看这一篇就够了

    目录 1 介绍 1.1 什么是数据校验 1.2 Java提供的数据校验工具 1.3 @Validated和@Valid的区别 1.4 依赖导入 1.5 常用数据校验注解 2 使用 2.1 校验实体类 ...

  4. Springboot @Validated参数校验

    简单使用 Java API规范(JSR303)定义了Bean校验的标准validation-api,但没有提供实现.hibernate validation是对这个规范的实现,并增加了校验注解如@Em ...

  5. 【SQL】分组数据,过滤分组-group by , having

    学习笔记,原文来自http://blog.csdn.net/robinjwong/article/details/24845125 创建分组 - GROUP BY 分组是在SELECT语句的GROUP ...

  6. @Validated数据校验

    @Validated数据校验 前言 为了减少代码进行对数据进行校验,利用@Validated来进行注解形式的数据校验 创建实体类 @Data @FieldDefaults(level = Access ...

  7. @Validated嵌套校验

    后台开发校验参数是非常重要的,使用Validated我们可以方便快捷完成参数校验,记录下Validated如何嵌套校验参数 校验List数据,必须要使用@Valid,不能使用@Validated,@V ...

  8. R语言ggplot2可视化、不同分组使用不同的色彩、同一分组(group)的线条使用相同的色彩但是配置使用不同的线型(line type)

    R语言ggplot2可视化.不同分组使用不同的色彩.同一分组(group)的线条使用相同的色彩但是配置使用不同的线型(line type) 目录

  9. mysql分组取日期最大的记录_mysql 分组 group by, 排序 取每条记录中,时间最大

    mysql教程 分组 group by, 排序 取每条记录中,时间最大的一条记录 select a.* from test a, (select aid, max(day) max_day from ...

最新文章

  1. Python基本语法_异常处理详解
  2. python中格式化_Python中格式化的两种方法
  3. linux给oracle导入sql语句,Linux数据库创建与数据导入
  4. 笔记本电脑频繁自动重启_笔记本电脑自动重启是什么原因
  5. 了解OAuth2令牌认证
  6. 不重启修改计算机名称,批处理不重启快速修改计算机名
  7. 【Kafka】Illegal unquoted character ((CTRL-CHAR, code 0)): has to be escaped using backs
  8. 安卓开发之开启子线程以及安卓的消息机制原理
  9. Linux中nginx安装基础教程
  10. Tableau可视化学习笔记:day01-02
  11. 练习--LINUX进程间通信之有名管理FIFO
  12. 最新30套Java项目实战
  13. 在SOUI里使用真窗口时使用SOUI的滚动条
  14. 项目报错-Some file crunching failed, see logs for details
  15. PushMall推贴共享电商十二月更新计划
  16. GC 的背景和一般原理--什么是GC,minor gc,major gc,full gc
  17. Discuz模板制作教程
  18. java怎么做3d可视化图形
  19. 关于SaaS平台中应对多租户模式的设计
  20. 使用CKRule实现PVC配方计算

热门文章

  1. javascript 中innerHTML的用法
  2. [统计学笔记] 统计学计算题选讲(精华)
  3. 【NOIP 2016 提高组】蚯蚓
  4. 刘盈盈计算机科学与技术,关于成立乐清市中小学幼儿园新教师专业发展指导师团队的通知...
  5. Extjs新手教程代码
  6. 数据库基础---选择,投影,连接,除法运算
  7. 分享快速检测肖特基二极管的小窍门
  8. 银行智能风险防控系统(第二版)
  9. 解决:the account is locked 被锁
  10. 23届银行秋招:农业银行面试分析!