前言
传参时候总会遇到各式各样的传参,有些状态传参,0或1,有些不连续的数值传参像1,2, 5等,本文主要记录这两种参数校验的解决方式
一、枚举校验
枚举校验一般是用在逻辑之中进行的参数校验
private void checkStatus(Integer imgStatus) {
if (ObjectUtil.isEmpty(BankBannerEnums.STATUS.findByCode(imgStatus))) {
throw new CustomException(ErrorConstant.INVALID_STATUS);
}
}
public class BankBannerEnums {
public enum STATUS {
/** 代发薪banner状态枚举 */
INVALID(0, "无效"),
VALID(1, "生效");
private Integer code;
private String value;
STATUS(Integer code, String value) {
this.code = code;
this.value = value;
}
public static BankBannerEnums.STATUS findByCode(Integer code) {
if (code != null) {
for (BankBannerEnums.STATUS status : BankBannerEnums.STATUS.values()) {
if (status.getCode().intValue() == code) {
return status;
}
}
}
return null;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
}
二、连续数字状态校验
连续数字校验比如状态是0和1则直接用自带注解就可以完成校验
@Max(value = 1)
@Min(value = 0)
private Integer status;
三、不连续数字自定义注解校验
如果状态是0,1,3 则可以用不连续数字自定义注解校验
// 元注解表示该注解可以用在的地方,此定义注解可以用在属性上
@Target(ElementType.FIELD)
// 元注解被它所注解的注解保留多久
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = MyConstrictorMethod.class)
public @interface MyConstraintValidator {
int [] value();
String message() default "类型不匹配";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
}
@Slf4j
public class MyConstrictorMethod implements ConstraintValidator<MyConstraintValidator, Object> {
private int[] values;
@Override
public void initialize(MyConstraintValidator myConstraintValidator) {
log.info("MyConstraintValidatorMethod 初始化");
this.values = myConstraintValidator.value();
}
@Override
public boolean isValid(Object o, ConstraintValidatorContext constraintValidatorContext) {
AtomicBoolean atomicValid = new AtomicBoolean(false);
if (o == null) {
//当状态为空时使用默认值
return atomicValid.get();
}
for (int value : values) {
if (value == (Integer) o) {
atomicValid.set(true);
}
}
return atomicValid.get();
}
}
@MyConstraintValidator(value = {0,1,3})
private Integer status;
注意
自测传入integer参数时候是可以传入小数的比如1.5,但是它会自动变为1传入