2024-07-14 使用@Validated实现分组校验(快速上手)

一、简述

首先是相似注解

1.来源

@Validated:Spring框架的注解,JSR-303的javax.validation的变体。设计用于方便使用Spring的JSR-303的支持,但不是JSR-303特有的。
@Valid:Java EE提供的标准注解,它是JSR 303规范的一部分,主要用于Hibernate Validation等场景。

2.注解位置 

@Validated:用在类、方法和方法参数
@Valid:用在方法、构造函数、方法参数和成员属性(字段)

3.分组验证

@Validated:支持
@Valid:不支持

4.嵌套验证

@Validated:不支持
@Valid:支持

二、@Validated分组校验实操 

这里只讲快速上手分组校验

1.问题场景

有时我们使用实体类接收json格式参数时,可能会遇到两个接口或者多个接口可以使用同一个实体类的情况,但是不同接口对不同字段有校验限制,以修改和新增接口为例,修改接口需要校验id非空,新增接口无需校验id非空

 2.演示

以一个实体为例,实体中有两个字段:id和title

@Data
public class WallPaper extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 主键 */
    @NotNull(message = "id不能为空", groups = {ValidatedGroupConfig.update.class})
    private Long id;

    /** 壁纸标题 */
    @Excel(name = "壁纸标题")
    @NotBlank(message = "title不能为空")
    private String title;
}

 可以注意到,id上标注的@NotNull注解中使用了一个参数“groups”,其中“ValidatedGroupConfig.update.class”为我们自定义的一个分组接口,接口内容如下

package com.wall.common.config;

/**
 * @version 1.0
 * @Author hanyang
 * @Date 2024/7/14 11:05
 */

public interface ValidatedGroupConfig {

    interface insert{}

    interface update{}

    interface del{}

    interface query{}
}

 里面分别有四个子接口,这就是我们自定义的“组”,我们只需在实体类和Controller中使用“groups”参数指定字段校验所属的分组,就可以实现分组校验,演示如下。

    /**
     * 新增壁纸表
     */
    @ApiOperation("新增壁纸")
    @PreAuthorize("@ss.hasPermi('business:paper:add')")
    @Log(title = "壁纸表", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody @Validated WallPaper wallPaper)
    {
        return toAjax(wallPaperService.insertWallPaper(wallPaper));
    }

  /**
     * 修改壁纸表
     */
    @ApiOperation("修改壁纸")
    @PreAuthorize("@ss.hasPermi('business:paper:edit')")
    @Log(title = "壁纸表", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody @Validated(ValidatedGroupConfig.update.class) WallPaper wallPaper)
    {
        return toAjax(wallPaperService.updateWallPaper(wallPaper));
    }

 上面的接口与实体中,edit接口指定分组为"ValidatedGroupConfig.update.class",而add接口没有指定分组,结合实体类中字段的分组,使用apifox测试接口

 

 以上就是分组校验

 

 

 

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
@Validated是Spring框架中的一个注解,用于对方法参数进行校验。它可以与其他校验注解(如@NotNull、@NotEmpty等)一起使用,以实现对方法参数的分组校验。 通过@Validated注解,我们可以在方法参数上使用分组校验注解来限制参数的校验规则。例如,我们可以定义多个校验分组,每个分组中包含不同的校验注解,然后在方法参数上使用@Validated注解指定要应用的校验分组。 下面是一个示例: ```java public class User { @NotNull(groups = {GroupA.class}) private String name; @NotEmpty(groups = {GroupB.class}) private String email; // getter and setter } public interface GroupA {} public interface GroupB {} @Service public class UserService { public void createUser(@Validated(GroupA.class) User user) { // 在此方法中只会对name字段进行校验 } public void updateUser(@Validated(GroupB.class) User user) { // 在此方法中只会对email字段进行校验 } } ``` 在上面的示例中,我们定义了一个User类,其中name字段使用了@NotNull注解,并将其分组为GroupA;email字段使用了@NotEmpty注解,并将其分组为GroupB。然后在UserService类中的createUser方法上使用了@Validated(GroupA.class)注解,表示在该方法中只对GroupA分组中的校验注解进行校验。 需要注意的是,为了使@Validated注解生效,我们还需要在Spring配置文件中启用方法参数校验,可以通过在配置类上添加@EnableWebMvc注解或在配置文件中配置相关属性来实现。 希望以上解答能够帮助到你!如果还有其他问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值