枚举的使用及校验

简介: 枚举的使用及校验

今天聊聊枚举咋用

先定义一个枚举

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);
    }
}

然后加上我们的注解

最后测试~

相关文章
|
7月前
|
Java
validator分组校验
validator分组校验
75 0
|
19天前
|
Python
基于 Validator 类实现 ParamValidator,用于校验函数参数
基于 Validator 类实现 ParamValidator,用于校验函数参数
29 0
|
19天前
|
数据格式 Python
添加 常用校验方法,校验常见数据格式
添加 常用校验方法,校验常见数据格式
29 0
|
19天前
|
数据格式 Python
添加 自定义校验方法,让用户自定义校验规则
添加 自定义校验方法,让用户自定义校验规则
42 0
|
6月前
枚举的使用和注意事项
枚举的使用和注意事项
22 0
|
Java Spring
自定义注解判断参数为空
使用Spring的 @Valid和@Validated不好嘛,干嘛要自己造轮子呢.......
|
算法 前端开发 程序员
实现数值校验算法
实现数值校验算法
实现数值校验算法
GoFrame数据校验之校验对象 | 校验结构体
这篇文章将会为大家介绍GoFrame数据校验中校验对象的知识点,包括:Validator对象常用方法的介绍、单数据校验、校验Map、校验结构体的示例
139 0
GoFrame数据校验之校验对象 | 校验结构体
|
运维 前端开发 JavaScript
如何优雅的校验参数
数据的校验是交互式网站一个不可或缺的功能,前端的js校验可以涵盖大部分的校验职责,如用户名唯一性,生日格式,邮箱格式校验等等常用的校验。但是为了避免用户绕过浏览器,使用http工具直接向后端请求一些违法数据,服务端的数据校验也是必要的,可以防止脏数据落到数据库中,如果数据库中出现一个非法的邮箱格式,也会让运维人员头疼不已。可以使用本文将要介绍的validation来对数据进行校验。
343 0
如何优雅的校验参数