Spring-@Validated的group分组校验

背景

实际开发过程中,为了方便,通常一个入参req会在多个接口中使用。但是虽然使用同一个入参类,但是不同的接口所需的参数不同,这个时候就需要我们根据不同的接口功能来确定每个接口必填的参数,这个时候就需要用到我们的分组校验@Validated了。

场景:新增insert及更新update

CRUD是系统中最常见的功能,下面就拿insert、update来做一个示例。
一般而言,我们会根据数据的id来执行更新操作,而新增时主键id却是自增的(或者雪花算法,总之不需要手动填写)。所以insert和update最大的区别就是id字段是否必填。

1、自定义两个接口insert、update
public interface Update {
    
}

public interface Insert {
    
}
2、对于不同功能必填字段做分组标识
@Data
public class StudentDTO {

    /**
     * count 用于 判断 数据(存在则更新,不存在则插入)
     */
    private Integer count;

    /**
     * 只在group = update.class时校验id not null
     */
    @NotNull(groups = {Update.class})
    private Integer id;

    private Integer age;

    private String name;

    private Integer gender;

    private Integer subject;

}
3、在需要校验的接口位置添加@Validated校验
    /**
     * validated分组校验
     *
     * @param dto
     * @return
     */
    @PostMapping("/update")
    public NormalResponse updateStudent(@Validated(value = Update.class) @RequestBody StudentDTO dto) {
        testService.saveOrUpdate(dto);
        return NormalResponse.ok();
    }
    /**
     * validated分组校验
     *
     * @param dto
     * @return
     */
    @PostMapping("/insert")
    public NormalResponse InsertStudent(@Validated(value = Insert.class) @RequestBody StudentDTO dto) {
        testService.saveOrUpdate(dto);
        return NormalResponse.ok();
    }

我们在入参req的属性id上添加的group分组标识为update,更新接口上的@Validated分组校验同样指定为update;新增接口上@Validated分组校验指定为insert,此时id的必填校验只会在更新接口才会触发。这样我们就简单的实现了一个用于insert和update的分组校验。
依照这个逻辑,我们可以扩展并根据自己的业务需要自定义分组group来校验不同需求下参数的校验。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

只吹45°风

感谢您的每一份支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值