关于自定义注解完成Validated 满足其一就成功的需求

本文介绍了一种在Java中使用自定义注解实现参数校验的方法,特别适用于需要二选一参数的情况。通过创建自定义注解@IsNull及其验证器IsNullValidator,实现了对两个参数其中之一必填的需求。

问题 :

需求是这样的,这有2个参数,我只想传其中一个参数,另外一个参数效验就不用效验

在这里插入图片描述

解决思路:

这就涉及到Validated 中的自定义注解的使用,废话不说直接上代码

1,自定义注解

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
 
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
 
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {IsNullValidator.class})
public @interface IsNull {
    // 默认这个参数必须得有
    boolean required() default true;
    // 如果校验不通过,提示什么信息
    String message() default "";
    Class<?>[] groups() default { };
    Class<? extends Payload>[] payload() default { };
}

2,自定义类IsNullValidator 复写 自定义注解IsNull的校验规则

@Slf4j
public class IsNullValidator implements ConstraintValidator<IsNull, String> {
 
    private boolean flag = true;
    private Integer size = 0;
 
    @Override
    public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
        log.info("isValid方法::========>>>>"+value);
        size ++;
        if (StringUtils.isBlank(value) && size == 1) {
            flag = false;
            return true;
        }
 
 
        if (size == 2) {
            size = 0;
            if (StringUtils.isBlank(value) && !flag) {
                flag = true;
                return false;
            }
        }
        flag = true;
        return true;
 
    }
}
@Data
public class User {
 
    @ApiModelProperty(value = "RampUp", required = true)
    @IsNull(message = "二选一")
    private String RampUp;
 
    @ApiModelProperty(value = "cycles", required = true)
    @IsNull(message = "二选一")
    private String cycles;
}

这里边有一个问题没完善掉,这个方法能不能支持并发操作,有待商榷,欢迎指正

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值