枚举的使用及校验

简介: 枚举的使用及校验

今天聊聊枚举咋用

先定义一个枚举

package com.ruben.enumration;
import com.alibaba.fastjson.annotation.JSONType;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
 * @ClassName: GenderEnum
 * @Description:
 * @Date: 2020/8/18 19:03
 * *
 * @author: achao<achao1441470436 @ gmail.com>
 * @version: 1.0
 * @since: JDK 1.8
 */
@JSONType(serializeEnumAsJavaBean = true)
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum GenderEnum {
    FEMALE("女", 0), MALE("男", 1);
    private String name;
    private Integer code;
    GenderEnum(String name, Integer code) {
        this.name = name;
        this.code = code;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getCode() {
        return code;
    }
    public void setCode(Integer code) {
        this.code = code;
    }
}

然后就可以使用了

public static void main(String[] args) {
        System.out.println(GenderEnum.MALE.getName()+" "+GenderEnum.MALE.getCode());
        System.out.println(GenderEnum.FEMALE.getName()+" "+GenderEnum.FEMALE.getCode());
    }

输出结果

男 1

女 0

有人可能会问,枚举用Validator怎么校验?

其实也很简单

比如,我们接收的参数只能限制为枚举内有的01

这时就自定义一个校验

package com.ruben.validator;
import com.ruben.enumration.GenderEnum;
import javax.validation.Constraint;
import javax.validation.Payload;
import javax.validation.ReportAsSingleViolation;
import javax.validation.constraints.NotNull;
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;
/**
 * @ClassName: Gender
 * @Description:
 * @Date: 2020/8/18 19:25
 * *
 * @author: achao<achao1441470436 @ gmail.com>
 * @version: 1.0
 * @since: JDK 1.8
 */
@NotNull
@Documented
@Retention(RUNTIME)
@Constraint(validatedBy = {GenderValidator.class})
@ReportAsSingleViolation
@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE})
public @interface Gender {
    String message() default "性别应该为:男1 女0";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
    GenderEnum[] value();
}

以及处理类

package com.ruben.validator;
import com.ruben.enumration.GenderEnum;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.stream.Collectors;
/**
 * @ClassName: GenderValidator
 * @Description:
 * @Date: 2020/8/18 19:25
 * *
 * @author: achao<achao1441470436 @ gmail.com>
 * @version: 1.0
 * @since: JDK 1.8
 */
public class GenderValidator implements ConstraintValidator<Gender, Integer> {
    private static final Set<Integer> GENDER_CONSTRAINTS = new HashSet<>();
    /**
     * Initializes the validator in preparation for
     *  calls.
     * The constraint annotation for a given constraint declaration
     * is passed.
     * <p>
     * This method is guaranteed to be called before any use of this instance for
     * validation.
     * <p>
     * The default implementation is a no-op.
     *
     * @param constraintAnnotation annotation instance for a given constraint declaration
     */
    @Override
    public void initialize(Gender constraintAnnotation) {
        GENDER_CONSTRAINTS.addAll(Arrays
                .stream(constraintAnnotation.value())
                .map(GenderEnum::getCode)
                .collect(Collectors.toSet()));
    }
    /**
     * Implements the validation logic.
     * The state of {@code value} must not be altered.
     * <p>
     * This method can be accessed concurrently, thread-safety must be ensured
     * by the implementation.
     *
     * @param value   object to validate
     * @param context context in which the constraint is evaluated
     * @return {@code false} if {@code value} does not pass the constraint
     */
    @Override
    public boolean isValid(Integer value, ConstraintValidatorContext context) {
        return GENDER_CONSTRAINTS.contains(value);
    }
}

然后加上我们的注解

最后测试~

相关文章
|
6月前
|
Java 数据库连接 测试技术
自定义校验注解,优雅的实现手机号,身份证号的格式校验!
本文介绍了如何创建自定义校验注解来实现手机号和身份证号的格式校验,包括定义注解、实现校验逻辑、将注解应用于模型类,以及常用的校验器库和框架,旨在提高代码的可维护性和减少重复的校验逻辑。
|
8月前
|
文字识别
文本,文字识别13,参数校验,实现参数校验,使用@Valid注解
文本,文字识别13,参数校验,实现参数校验,使用@Valid注解
|
9月前
|
Java Spring 容器
详解java参数校验之:顺序校验、自定义校验、分组校验(@Validated @GroupSequence)
详解java参数校验之:顺序校验、自定义校验、分组校验(@Validated @GroupSequence)
|
10月前
|
安全 Java 索引
枚举的使用
枚举的使用
|
10月前
|
数据格式 Python
添加 常用校验方法,校验常见数据格式
添加 常用校验方法,校验常见数据格式
89 0
枚举的使用和注意事项
枚举的使用和注意事项
60 0
|
前端开发
IE校验问题
IE校验问题
58 0
|
安全 索引
|
Java
输入源“/body/sub_mchid”映射到字段“子商户号”必填性规则校验失败,此字段为必填项
输入源“/body/sub_mchid”映射到字段“子商户号”必填性规则校验失败,此字段为必填项
862 0