参数校验—自定义参数校验方法

自定义参数校验方法

使用 script

@ScriptAssert(
    script = "com.pinlor.web.request.config.AddConfigRequest.checkAGreaterEqualB(_this.shippingFee,_this.shippingFeeDiscount)",
    lang = "javascript", message = "配送费金额不可小于配送费减免金额!")
@Getter
@Setter
public class AddConfigRequest extends ApiRequest {
    /**
     * 配置名称
     */
    @NotBlank
    private String pageConfName;
    /**
     * 公告信息
     */
    @NotBlank
    private String bulletinBoard;
    /**
     * 配送时效
     */
    @NotBlank
    private String shippingTimely;
    /**
     * 配送费金额
     */
    @NotNull
    @Min(0)
    private BigDecimal shippingFee;
    /**
     * 配送费减免金额
     */
    @NotNull
    private BigDecimal shippingFeeDiscount;
    @NotNull
    private Long createBy;
    private Date createDate;
    @NotNull
    private Long updateBy;
    private Date updateDate;
    /**
     * num1 不可小于 num2
     *
     * @param num1
     * @param num2
     * @return
     */
    public static boolean checkAGreaterEqualB(BigDecimal num1, BigDecimal num2) {
        return num1.compareTo(num2) >= 0;
    }
}

使用 @Pattern

可以往里面放一个正则表达式,只能作用在字符串上,规定内容必须符合一定正则表达式。

@Pattern(regexp = "^[a-zA-Z]$", message = "检索首字母必须是英文字母!")

自定义校验注解

在想用的地方加上注解就行。

新建自定义注解

import com.chw.common.validator.constraint.ListValueConstraintValidator;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
/**
 * The interface List value.
 *
 * @author CHW
 * @date 2023.06.04 18:21:24
 */
@Documented
// validatedBy 可以指定多个,目前只指定了一个校验 Integer 的。
// 会根据参数类型自动适配校验器
@Constraint(validatedBy = {ListValueConstraintValidator.class})
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
public @interface ListValue {
  /**
   * Message string.
   *
   * @return the string
   */
  String message() default "{com.chw.common.annotation.ListValue.message}";
  /**
   * Groups class [ ].
   *
   * @return the class [ ]
   */
  Class<?>[] groups() default {};
  /**
   * Payload class [ ].
   *
   * @return the class [ ]
   */
  Class<? extends Payload>[] payload() default {};
  /**
   * Values int [ ].
   *
   * @return the int [ ]
   */
  int[] values() default {};
}

自定义校验器

import com.chw.common.annotation.ListValue;
import java.util.HashSet;
import java.util.Set;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import org.apache.commons.lang3.ArrayUtils;
/**
 * The type List value constraint validator.
 *
 * @author CHW
 * @date 2023.06.04 18:24:35
 */
public class ListValueConstraintValidator implements ConstraintValidator<ListValue, Integer> {
  private final Set<Integer> legalValueSet = new HashSet<>();
  /**
   * 初始化方法
   *
   * @param constraintAnnotation the constraint annotation
   */
  @Override
  public void initialize(ListValue constraintAnnotation) {
    int[] values = constraintAnnotation.values();
    if (ArrayUtils.isNotEmpty(values)) {
      for (int value : values) {
        legalValueSet.add(value);
      }
    }
  }
  /**
   * 判断入参value是否通过校验
   *
   * @param value                      the value
   * @param constraintValidatorContext the constraint validator context
   * @return the boolean
   */
  @Override
  public boolean isValid(Integer value, ConstraintValidatorContext constraintValidatorContext) {
    return legalValueSet.contains(value);
  }
}

新建 ValidationMessages.properties文件

com.chw.common.annotation.ListValue.message = 必须提交指定的值
  • 22
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值