java-springboot-参数验证validation,允许传入code值某些值如:“ACCEPT,REJECT“


前言

提示:参数校验我们是基于spring-boot-starter-validation来做的,但是允许传入某些参数的校验需要我们自定义
怎么引入spring-boot-starter-validation,参考之前的文章点这里

一、场景

经常我们需要前端传入一些定义的枚举或者常量的字段,后台需要对传入的字段进行校验,验证传入参数是不是之前约定好的。

二、自定义AllowValue校验

自定义注解

@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RUNTIME)
@Constraint(validatedBy = AllowValueImpl.class)
public @interface AllowValue {
    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

    String message() default "not allow value";

    String value();

    boolean required() default false;
}

验证实现类

public class AllowValueImpl implements ConstraintValidator<AllowValue, Object> {
    private String value;
    private boolean required;

    @Override
    public void initialize(AllowValue constraint) {
        this.value = constraint.value();
        this.required = constraint.required();
    }

    @Override
    public boolean isValid(Object obj, ConstraintValidatorContext context) {
        if (null != obj) {
            if (StringUtils.isNotEmpty(value)) {
                String[] split = value.split(",");
                if (split.length > 0) {
                    for (String s : split) {
                        if (obj instanceof String){
                            if (s.equals(obj)) {
                                return true;
                            }
                        }else if (obj instanceof Integer){
                            if ((obj).equals(Integer.parseInt(s))){
                                return true;
                            }
                        }
                    }
                }
            }
        } else {
            return required?false:true;
        }
        return false;
    }
}

isValid 方法返回true或者false 如果为false时会将message错误信息返回出来。

二、实际使用

场景:我们需要前端调用接口进行数据审核,我们定义了两个code

  • ACCEPT 审核通过
  • REJECT 审核驳回
@Data
@EqualsAndHashCode(callSuper = false)
public class CompanyAttributeApprovalDto {
	@NotNull
	private Long id;
	@NotNull
	@AllowValue(value = "ACCEPT,REJECT",message = "审核状态错误")
	private String auditStatus;
	private String rejectReason;
}

controler


    @PostMapping("/approval")
    public CommonResult<Boolean> approval(@RequestBody @Valid CompanyAttributeApprovalDto approvalDto){
       // 通过或驳回
        return CommonResult.Success(true);
    }

controler接收到参数时会校验,传入的参数是否符合@AllowValue注解的value中约定的参数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值