比如说我现在有一个品牌类
package com.atguigu.product.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import lombok.Data;
import org.hibernate.validator.constraints.URL;
import javax.validation.constraints.*;
/**
* 品牌
*/
@Data
@TableName("pms_brand")
public class BrandEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 品牌id
*/
@NotNull(message = "修改必须指定ID")
@Null(message = "新增不能指定ID")
@TableId
private Long brandId;
/**
* 品牌名
*/
@NotBlank(message = "品牌名必须提交")
private String name;
/**
* 品牌logo地址
*/
@NotEmpty
@URL(message = "logo必须是一个合法的url地址")
private String logo;
/**
* 介绍
*/
private String descript;
/**
* 显示状态[0-不显示;1-显示]
*/
private Integer showStatus;
/**
* 检索首字母
*/
@Pattern(regexp = "/^[a-zA-Z]$/",message = "检索首字母必须是一个字母")
private String firstLetter;
/**
* 排序
*/
@NotNull
@Min(value = 0,message = "排序必须大于等于0")
private Integer sort;
}
注意我的品牌ID是有两种情况的
/**
* 品牌id
*/
@NotNull(message = "修改必须指定ID")
@Null(message = "新增不能指定ID")
@TableId
private Long brandId;
要么为空,要么不为空。要求为空是因为它是新增的情况,要求不为空是因为它是修改的情况。
接下来我们用Group字段来指定不同情况的下,不同组的校验规则。
在通用服务创建一个valid包,并添加 AddGroup 新增分组和 UpdateGroup 更新分组
那么我们就可以修改品牌ID的注解如下,以分配至不同的校验分组
/**
* 品牌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;
修改BrandController的内容,在保存的参数新加注解 @Validated({AddGroup.class})
package com.atguigu.product.controller;
...
/**
* 品牌
*/
@RestController
@RequestMapping("product/brand")
public class BrandController {
@Autowired
private BrandService brandService;
...
/**
* 保存
*/
@RequestMapping("/save")
//@RequiresPermissions("product:brand:save")
public R save(@Validated({AddGroup.class}) @RequestBody BrandEntity brand){
brandService.save(brand);
return R.ok();
}
...
}
注意,没有写分组的字段,默认校验是不生效的。因此你需要把所有字段都配置好分组
如
@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地址
*/
@NotEmpty(groups = {AddGroup.class})
@URL(message = "logo必须是一个合法的url地址",groups = {AddGroup.class,UpdateGroup.class})
private String logo;
/**
* 介绍
*/
private String descript;
/**
* 显示状态[0-不显示;1-显示]
*/
private Integer showStatus;
/**
* 检索首字母
*/
@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;
}