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 测试