SpringBoot - 优雅的实现参数分组校验高级进阶

Posted 小小工匠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot - 优雅的实现参数分组校验高级进阶相关的知识,希望对你有一定的参考价值。

文章目录


Pre

SpringBoot - 优雅的实现【参数校验】高级进阶

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.Default,再在分组接口中定义出多个不同的操作类型,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校验让业务代码更简洁

SpringBoot - 使用Assert校验让业务代码更简洁

SpringBoot - 优雅的实现参数校验高级进阶

SpringBoot中如何实现业务校验,这种方式才叫优雅!

SpringBoot - 优雅的实现应用启动参数校验

SpringBoot中如何实现业务校验,这种方式才叫优雅!