基于@GroupSequence校验分组

您所在的位置:网站首页 bigdecimal注解校验 基于@GroupSequence校验分组

基于@GroupSequence校验分组

2023-04-02 16:49| 来源: 网络整理| 查看: 265

一、需求背景

项目中使用实体类方式校验参数(javax.validation注解类)时,比如:

//实体类 package com.xx.openplat.dto; import com.xx.common.annotation.NotBlankLength; import com.xx.common.annotation.group.IGroupA; import com.xx.common.constant.ValidRuleDef; import lombok.Data; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; import java.math.BigDecimal; /** * @ClassName PurCancelRequestDTO * @Description xx接口 * @Author whb * @Date 2023/2/6 13:42 * @Version 1.0 **/ @Data public class PurCancelRequestDTO { @NotBlank(message = "订单号不能为空") @Pattern(regexp = ValidRuleDef.NUMBER_EN_LAST_3NUM_PATTERN, message = "订单号必须输入8-24位的数字或字母且最后3位必须为数字") private String ordNo;// 订单号 @NotBlank(message = "申请时间不能为空") @Pattern(regexp = ValidRuleDef.REGEXP_yyyyMMddHHmmss, message = "申请时间格式为yyyyMMddHHmmss") private String applyTimeStr; // 申请时间 @NotBlank(message = "签约协议号不能为空") @NotBlankLength(message = "签约协议号长度不能超过32位", max = 32) private String agreeNo;// 签约协议号     ...... } //controller类使用 @PostMapping(value = "/purcancel") public PurCancelResponseDTO purcancel(@RequestBody @Valid PurCancelRequestDTO dto) throws Exception { ....... }

@NotBlank校验不为空,@Pattern校验是否匹配正则表达式是javax.validation类中的校验注解。

但在使用中却存在问题。校验时顺序不定,有时先校验@NotBlank,有时先校验@Pattern。需求是先校验不为空再校验其他。

二、解决方案

使用@GroupSequence对校验分组,定义先后校验顺序。javax.validation.GroupSequence

三、实战代码 1.新增校验组 public interface IGroupA { } public interface IGroupB { } public interface IGroupC { } 2.@GroupSequence指定顺序 import javax.validation.GroupSequence; import javax.validation.groups.Default; /** * validation校验分组 * 顺序为A,B,C,Default */ @GroupSequence({IGroupA.class, IGroupB.class, IGroupC.class, Default.class}) public interface IGroup { } 3.参数校验

注解@NotBlank(message = "", groups = IGroupA.class),优先校验@NotBlank。

校验实体加上@Validated({IGroup.class})

//实体类 package com.xx.openplat.dto; import com.xx.common.annotation.NotBlankLength; import com.xx.common.annotation.group.IGroupA; import com.xx.common.constant.ValidRuleDef; import lombok.Data; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; import java.math.BigDecimal; /** * @ClassName PurCancelRequestDTO * @Description xx接口 * @Author whb * @Date 2023/2/6 13:42 * @Version 1.0 **/ @Data public class PurCancelRequestDTO { @NotBlank(message = "订单号不能为空", groups = IGroupA.class) @Pattern(regexp = ValidRuleDef.NUMBER_EN_LAST_3NUM_PATTERN, message = "订单号必须输入8-24位的数字或字母且最后3位必须为数字") private String ordNo;// 订单号 @NotBlank(message = "申请时间不能为空", groups = IGroupA.class) @Pattern(regexp = ValidRuleDef.REGEXP_yyyyMMddHHmmss, message = "申请时间格式为yyyyMMddHHmmss") private String applyTimeStr; // 申请时间 @NotBlank(message = "签约协议号不能为空") @NotBlankLength(message = "签约协议号长度不能超过32位", max = 32) private String agreeNo;// 签约协议号 ....... } //controller类 @PostMapping(value = "/purcancel") public PurCancelResponseDTO purcancel(@RequestBody @Validated({IGroup.class}) PurCancelRequestDTO dto) throws Exception { ....... }



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3