首页 > 编程语言 > 详细

hibernate validation,spring validation自定义参数校验

时间:2020-12-24 21:31:18      阅读:47      评论:0      收藏:0      [点我收藏+]

1.背景

在实际开发中,我们除了会使用常用的参数判断,如字符串不为空,最大值,最小值等

我们还可以自定义参数校验规则

2.实际生产问题

实际生产中同步订单的时候,

假设我们要求订单状态值只能是 -1, 0, 1, 或者不传

3.实现方案

步骤一:建立一个参数检查对象EnumValueValidator 

注意:这里要用到下一步建立的注解EnumValue

package com.ldp.notify.common.validation;

import cn.hutool.core.util.StrUtil;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

/**
 * @Copyright (C) 
 * @Author: lidongping
 * @Date: 2020-12-24 17:57
 * @Description:
 * <P>
 *     创建一个参数检查对象
 * </P>
 */
public class EnumValueValidator implements ConstraintValidator<EnumValue, Object> {
    private String[] strValues;
    private int[] intValues;

    @Override
    public void initialize(EnumValue constraintAnnotation) {
        strValues = constraintAnnotation.strValues();
        intValues = constraintAnnotation.intValues();
    }

    @Override
    public boolean isValid(Object value, ConstraintValidatorContext context) {
        if (value==null || StrUtil.isEmpty(value.toString())){
            return true;
        }
        if (value instanceof String) {
            for (String s : strValues) {
                if (s.equals(value)) {
                    return true;
                }
            }
        } else if (value instanceof Integer) {
            for (Integer s : intValues) {
                if (s == value) {
                    return true;
                }
            }
        }
        return false;
    }

}

 

步骤二:建立一个注解EnumValue

注意这里要用到上一步建立的检查对象EnumValueValidator 

package com.ldp.notify.common.validation;

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;

/**
 * @Copyright (C) 
 * @Author: lidongping
 * @Date: 2020-12-24 17:53
 * @Description:
 */
@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER})
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {EnumValueValidator.class})
public @interface EnumValue {

    //默认错误消息
    String message() default "必须为指定值:0,1";

    String[] strValues() default {"0", "1"};

    int[] intValues() default {};

    //分组
    Class<?>[] groups() default {};

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

    //指定多个时使用
    @Target({FIELD, METHOD, PARAMETER, ANNOTATION_TYPE})
    @Retention(RUNTIME)
    @Documented
    @interface List {
        EnumValue[] value();
    }
}

 

第三步:使用

技术分享图片

完美

hibernate validation,spring validation自定义参数校验

原文:https://www.cnblogs.com/newAndHui/p/14185807.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!