@Validated注解分组的使用

引言:
@Validated 是在@Valid 注解基础之上,提供了更丰富的功能, 其中之一就是分组校验. 那么什么是分组校验呢?
相信大家在实际工作中, 一定会遇到这样的场景. request的某个参数, 在新增时不需要前端传, 但是编辑时需要前端传, 其余字段也都是一模一样的, 没办法, 还是得建两个request. 用分组校验就是为了解决这个问题的.
废话不多说, 上代码:

  • 定义分组
    这里定义了一个app分组, 注意, 该类需要继承Default
import javax.validation.groups.Default;

/**
 * @author Lynn
 * @date 2022/11/14 10:57
 */
public interface AppGroup extends Default {
}
  • request字段上加上AppGroup 分组
    这样只有在指定为AppGroup 分组时, 才会去对该字段进行校验
/**
 * @author Lynn
 * @date 2022/9/20 17:59
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class ProductQueryDetailRequest extends ProductBaseRequest {

    /**
     * 商品类型
     */
    @NotNull(message = "商品类型不能为空")
    @EnumValid(message = "商品类型输入错误", enumClass = ProductTypeEnum.class)
    private Integer productType;

    /**
     * app来源
     */
    @NotBlank(groups = {AppGroup.class}, message = "app来源不能为空")
    @EnumValid(message = "app来源输入错误", enumClass = AppSourceEnum.class)
    private String appSource;
}
  • Controller层注解使用
    @Validated({AppGroup.class}) 指定分组为AppGroup
/**
     * 查询商品详情
     *
     * @param request {@link ProductQueryDetailRequest}
     * @return {@link BaseResponse<ProductAppDetailResponse>}
     */
    @PostMapping("/detail/query")
    public BaseResponse<ProductAppDetailResponse>
        queryDetail(@RequestBody @Validated({AppGroup.class}) ProductQueryDetailRequest request) {
        super.checkUserValidation(request);
        ProductDto dto = EntityConverterUtils.convert(request, ProductDto.class);
        return BaseResponse.success(EntityConverterUtils.convert(
            this.getServiceImpl(dto.getProductType()).queryAppProductDetail(dto), ProductAppDetailResponse.class));
    }

这样在Controller层指定AppGroup分组, 才会对appSource字段进行校验, 不指定分组就不校验该字段.
以此类推, 可以定义不同的分组, 去匹配不通的场景, 就可以减少request的创建.

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
@Validated注解Spring框架中用于进行参数校验的注解。它可以应用在方法参数、方法返回值、方法中的局部变量以及方法级别上。@Validated注解主要用于对方法参数进行校验。 使用@Validated注解需要满足以下几个条件: 1. 在Controller类或者方法上添加@Validated注解。 2. 在方法参数上添加@Valid或者@Validated注解进行参数校验。 3. 在被校验的实体类的属性上使用相应的校验注解,例如@NotNull、@NotBlank、@Min等。 例如,可以在Controller的方法参数上使用@Validated注解进行参数校验,如下所示: ```java @PostMapping("/example") public String exampleMethod(@Validated @RequestBody ExampleDto exampleDto) { // 执行业务逻辑 return "success"; } ``` 在上面的例子中,@Validated注解用于对exampleDto对象进行参数校验。在ExampleDto类的属性上使用了相关的校验注解,例如@NotNull、@NotBlank等,用于指定属性的校验规则。 需要注意的是,@Validated注解和@Valid注解的区别在于,@Validated注解提供了分组校验的功能,可以根据不同的业务场景对校验规则进行分类。而@Valid注解不支持分组校验。 综上所述,@Validated注解是用于对方法参数进行校验的注解,可以在Spring框架中进行使用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [spring中@Validated注解使用](https://blog.csdn.net/ctycsdn/article/details/117789981)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [@Validate注解使用原理详解](https://blog.csdn.net/qq_27886773/article/details/120246414)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [@Validated@Valid注解使用](https://blog.csdn.net/weixin_43161973/article/details/107673805)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值