谷粒商城品牌管理校验(十)

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 方法。

 /**
* 保存
*/
@RequestMapping("/save")
public R save(@Validated({AddGroup.class}) @RequestBody BrandEntity brand){
brandService.save(brand);
return R.ok();
}

/**
* 修改
*/
@RequestMapping("/update")
public R update(@Validated(UpdateGroup.class) @RequestBody BrandEntity brand){
brandService.updateById(brand);

return R.ok();
}

Step4:
  使用 Postman 测试

 

原文地址:https://www.cnblogs.com/dalianpai/p/13027570.html