谷粒商城品牌管理校验(十)
68、商品服务-API-品牌管理-JSR303分组校验
JSR 303 分组校验
(1)为什么使用 分组校验?
通过上面的过程,可以了解到单个方法的校验规则。
如果出现多个方法,都需要校验 Bean,且校验规则不同的时候,怎么办呢?
分组校验就可以去解决该问题,每个分组指定不同的校验规则,不同的方法执行不同的分组,就可以得到不同的校验结果。
(2)基本认识
JSR 303 的每个注解都默认具备三个属性:
message 用来定义数据校验失败后的提示消息,默认读取配置文件的内容。
全局搜索 ValidationMessages.properties,可以看到默认的信息。
groups 用来定义分组,其是一个 class 数组,可以指定多个分组。
String message() default "{javax.validation.constraints.NotNull.message}";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
(3)使用分组步骤:
Step1:
定义一个空接口,用于指定分组,内部不需要任何实现。
Step2:
指定 注解时,通过 groups 指定分组。用于指定在某个分组条件下,才去执行校验规则。
Step3:
在相关的业务方法上,通过 @Validated 注解指定分组,去指定校验。
注:
使用分组校验后,Bean 注解上若不指定分组,则不会执行校验规则。
(4)使用:
Step1:
创建分组接口。
创建两个分组接口 AddGroup、UpdateGroup。
其中:
AddGroup 用于指定 添加数据 时的校验规则(比如:id、name 均不为 null)。
UpdateGroup 用于指定 修改数据 时的校验规则(比如:name 不允许为 null)。

Step2:
给 Bean 添加注解,并指定分组信息。
/**
* 品牌
*
* @author dalianpai
* @email dalianpai@163.com
* @date 2020-05-25 16:55:42
*/
@Data
@TableName("pms_brand")
public class BrandEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 品牌id
*/
@NotNull(message = "修改必须指定品牌id",groups = {UpdateGroup.class})
@Null(message = "新增不能指定id",groups = {AddGroup.class})
@TableId
private Long brandId;
/**
* 品牌名
*/
@NotBlank(message = "品牌名必须提交",groups = {AddGroup.class,UpdateGroup.class})
private String name;
/**
* 品牌logo地址
*/
@NotBlank(groups = {AddGroup.class})
@URL(message = "logo必须是一个合法的url地址",groups={AddGroup.class,UpdateGroup.class})
private String logo;
/**
* 介绍
*/
private String descript;
/**
* 显示状态[0-不显示;1-显示]
*/
// @Pattern()
@NotNull(groups = {AddGroup.class, UpdateStatusGroup.class})
private Integer showStatus;
/**
* 检索首字母
*/
@NotEmpty(groups={AddGroup.class})
@Pattern(regexp="^[a-zA-Z]$",message = "检索首字母必须是一个字母",groups={AddGroup.class, UpdateGroup.class})
private String firstLetter;
/**
* 排序
*/
@NotNull(groups={AddGroup.class})
@Min(value = 0,message = "排序必须大于等于0",groups={AddGroup.class,UpdateGroup.class})
private Integer sort;
}
Step3:
在业务方法上,通过 @Validated 注解指定分组,去指定校验。
如下例,定义两个方法,Post 请求会触发 createEmp 方法,Put 请求会触发 UpdateEmp 方法。

Step4:
使用 Postman 测试



浙公网安备 33010602011771号