一、简述
首先是相似注解
1.来源
@Validated:Spring框架的注解,JSR-303的javax.validation的变体。设计用于方便使用Spring的JSR-303的支持,但不是JSR-303特有的。
@Valid:Java EE提供的标准注解,它是JSR 303规范的一部分,主要用于Hibernate Validation等场景。
2.注解位置
@Validated:用在类、方法和方法参数
@Valid:用在方法、构造函数、方法参数和成员属性(字段)
3.分组验证
@Validated:支持
@Valid:不支持
4.嵌套验证
@Validated:不支持
@Valid:支持
二、@Validated分组校验实操
这里只讲快速上手分组校验
1.问题场景
有时我们使用实体类接收json格式参数时,可能会遇到两个接口或者多个接口可以使用同一个实体类的情况,但是不同接口对不同字段有校验限制,以修改和新增接口为例,修改接口需要校验id非空,新增接口无需校验id非空。
2.演示
以一个实体为例,实体中有两个字段:id和title
@Data
public class WallPaper extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 主键 */
@NotNull(message = "id不能为空", groups = {ValidatedGroupConfig.update.class})
private Long id;
/** 壁纸标题 */
@Excel(name = "壁纸标题")
@NotBlank(message = "title不能为空")
private String title;
}
可以注意到,id上标注的@NotNull注解中使用了一个参数“groups”,其中“ValidatedGroupConfig.update.class”为我们自定义的一个分组接口,接口内容如下
package com.wall.common.config;
/**
* @version 1.0
* @Author hanyang
* @Date 2024/7/14 11:05
*/
public interface ValidatedGroupConfig {
interface insert{}
interface update{}
interface del{}
interface query{}
}
里面分别有四个子接口,这就是我们自定义的“组”,我们只需在实体类和Controller中使用“groups”参数指定字段校验所属的分组,就可以实现分组校验,演示如下。
/**
* 新增壁纸表
*/
@ApiOperation("新增壁纸")
@PreAuthorize("@ss.hasPermi('business:paper:add')")
@Log(title = "壁纸表", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody @Validated WallPaper wallPaper)
{
return toAjax(wallPaperService.insertWallPaper(wallPaper));
}
/**
* 修改壁纸表
*/
@ApiOperation("修改壁纸")
@PreAuthorize("@ss.hasPermi('business:paper:edit')")
@Log(title = "壁纸表", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody @Validated(ValidatedGroupConfig.update.class) WallPaper wallPaper)
{
return toAjax(wallPaperService.updateWallPaper(wallPaper));
}
上面的接口与实体中,edit接口指定分组为"ValidatedGroupConfig.update.class",而add接口没有指定分组,结合实体类中字段的分组,使用apifox测试接口
以上就是分组校验