自定义参数校验方法
使用 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 = 必须提交指定的值