SpringBoot 轻松搞定数据验证 (三)

感谢作者: http://www.spring4all.com/article/1228

本章也是轻松搞定数据验证的最后一篇, 一起来揭开神秘的分组验证

分组验证

有的时候,我们对一个实体类需要有多中验证方式,在不同的情况下使用不同验证方式,比如说对于一个实体类来的 id 来说,新增的时候是不需要的,对于更新时是必须的,这个时候你是选择写一个实体类呢还是写两个呢?

自定有数据有效性校验注解中介绍到注解需要有一个 groups 属性,这个属性的作用又是什么呢?

接下来就让我们看看如何用一个验证类实现多个接口之间不同规则的验证...


分组验证器

定义一个验证组,里面写上不同的空接口类即可

/**
 * @author Ray
 * @date 2018/7/4 0004
 * 验证组
 */
public class Groups {

    public interface Update{};

    public interface Default{};
}


实体类

groups 属性的作用就让 @Validated 注解只验证与自身 value 属性相匹配的字段,可多个,只要满足就会去纳入验证范围;我们都知道针对新增的数据我们并不需要验证 ID 是否存在,我们只在做修改操作的时候需要用到,因此这里将 ID 字段归纳到 Groups.Update.class 中去,而其它字段是不论新增还是修改都需要用到所以归纳到 Groups.Default.class中...

/**
 * @author Ray
 * @date 2018/7/4 0004
 */
public class Book3 {

    @NotNull(message = "id 不能为空", groups = Groups.Update.class)
    private Integer id;

    @NotNull(message = "name 不允许为空", groups = Groups.Default.class)
    private String name;

    @NotNull(message = "price 不允许为空", groups = Groups.Default.class)
    private BigDecimal price;

    // 省略setter/getter
}


控制层

/**
 * @author Ray
 * @date 2018/7/4 0004
 * 参数校验
 */
@RestController
public class ValidateController3 {

    /**
     *  insert 方法并不关心 ID 字段
     */
    @GetMapping("/insert")
    public String insert(@Validated(value = Groups.Default.class)Book3 book3){
        return "insert";
    }

    /**
     *  update 方法需要去验证 ID 是否为空
     */
    @GetMapping("/update")
    public String update(@Validated(value = {Groups.Default.class, Groups.Update.class}) Book3 book3){
        return "update";
    }
}


测试

完成准备事项后,启动项目,自行测试即可,测试手段相信大伙都不陌生了,如 浏览器postmanjunitswagger,此处基于 postman

>insert接口


>update接口



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值