SpringBoot - 优雅的实现参数分组校验高级进阶
Posted 小小工匠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot - 优雅的实现参数分组校验高级进阶相关的知识,希望对你有一定的参考价值。
文章目录
Pre
SpringBoot - 优雅的实现【自定义参数校验】高级进阶
SpringBoot - 优雅的实现【参数分组校验】高级进阶
需求
我们经常会碰到这样的一个场景: 新增的时候某些字段为必填(比如密码), 更新的时候非必填。
实现三部曲
Validator校验框架提供了分组校验,可以帮助我们快速的实现这样的需求。
Step1 定义分组接口
import javax.validation.groups.Default;
/**
* @author 小工匠
* @version 1.0
* @description: TODO
* @date 2022/2/21 23:03
* @mark: show me the code , change the world
*/
public interface CustomValidateGroup extends Default
interface Crud extends CustomValidateGroup
interface Create extends Crud
interface Update extends Crud
interface Query extends Crud
interface Delete extends Crud
定义一个分组接口CustomValidateGroup
让其继承javax.validation.groups.Defaul
t,再在分组接口中定义出多个不同的操作类型,Create,Update,Query,Delete.
Step2 给参数分配分组
@Length(min = 8, max = 12, message = "password长度必须位于8到12之间")
@NotNull(groups = CustomValidateGroup.Crud.Create.class,message = "新增接口密码不能为空")
@Null(groups = CustomValidateGroup.Crud.Update.class)
private String password;
Step3 指定分组
给需要参数校验的方法指定分组
/**
* 新增的时候 不能为空
* @param artisan
* @return
*/
@PostMapping(value = "/add")
public String add(@Validated(value = CustomValidateGroup.Crud.Create.class) Artisan artisan)
log.info("InComing Param is ", artisan);
return "add valid success";
/**
* 更新的时候 可以为空
* @param artisan
* @return
*/
@PostMapping(value = "/update")
public String update(@Validated(value = CustomValidateGroup.Crud.Update.class) Artisan artisan)
log.info("InComing Param is ", artisan);
return "update valid success";
通过value属性给add()和update()方法分别指定Create和Update分组
Step4 验证
新增,期望 密码不能为空 ,我们填个空试试
【修改】
对于未指定分组的则使用的是默认分组 。 比如由于email属于默认分组,而我们的分组接口CustomValidateGroup
已经继承了Default分组,所以也是可以对email字段作参数校验的
如果CustomValidateGroup没有继承Default分组,那在代码属性上就需要加上@Validated(value = ValidGroup.Crud.Create.class, Default.class
才能让email字段的校验生效。
源码
https://github.com/yangshangwei/boot2
以上是关于SpringBoot - 优雅的实现参数分组校验高级进阶的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot - 使用Assert校验让业务代码更简洁