Java Bean Validation使用中,最常见的一个场景是,我们在增加和修改实体的时候,一般都是使用同一个实体类,但是增加和修改操作对实体的参数校验是不同的。Java Bean Validation提供分组校验的功能,可以实现针对不同的场景应用不同的校验规则
定义分组类
每个分组类只需要一个接口就可以了
AddGroup
public interface AddGroup {
}
UpdateGroup
public interface UpdateGroup {
}
校验规则上添加分组
@Data
public class Person {
//添加分组信息:添加的时候不能有id,修改的时候却一定要有id
@Null(message = "id should be empty", groups = {AddGroup.class})
@NotNull(message = "id should not be empty", groups = {UpdateGroup.class})
private Integer id;
@Length(min = 2, max = 10, message = "name的长度为[2-10]之间")
@NotBlank(message = "name should not be empty")
private String name;
}
修改校验接口
- 由
@Valid
修改成@Validated
- 添加分组
{AddGroup.class, Default.class}
@PostMapping("create")
public WebResult<String> create(@Validated({AddGroup.class, Default.class}) @RequestBody Person person) {
log.info("person to create: {}", person);
return new WebResult<>(person.getName());
}
@PutMapping("update")
public WebResult<Void> update(@Validated({UpdateGroup.class, Default.class}) @RequestBody Person person) {
log.info("person to update: {}", person);
return WebResult.SUCCESS;
}
注意事项
- 配置分组的时候,记得不要漏掉默认分组
Default.class
,否则就只会校验groups = {AddGroup.class}
的规则了