1、javax.validation中定义了大量的校验方法,能校验从页面接收到的数据;
2、但是对应对于枚举值的校验却没有,需要自己实现一个;
(例如:男女性别字段的值只能是1/2,状态值只能是1、2、3这三种情况)
3、创建过程:a.创建一个自定义注解【EnumValidation】;b.创建一个枚举类校验器【EnumValidator】
1、自定义的注解【EnumValidation】
package com.muscleape.annotation;
import com.muscleape.validator.EnumValidator;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* To validate a enum's value is right or not .
* <p>
* example one, if a enum like
* <code>
* public enum Sex {
* <p>
* MALE, FEMALE, OTHER
* }
* </code>
* can use the annotation as <code>@Enum(clazz = Sex.class)</code>, and param sex = 0;
* Or use the annotation as <code>@Enum(clazz = Sex.class, method = "name")</code>,
* and param sex = "MALE";
* <p>
* example two, if a enum like
* <code>
* public enum Role {
* <p>
* ADMIN(1, "ADMIN"),
* TEST(2, "TEST"),
* DEVELOP(3, "DEVELOP");
* <p>
* private int value;
* private String desc;
* <p>
* Role(int value, String desc) {
* this.value = value;
* this.desc = desc;
* }
* <p>
* public int getValue() {
* return value;
* }
* <p>
* public void setValue(int value) {
* this.value = value;
* }
* <p>
* public String getDesc() {
* return desc;
* }
* <p>
* public void setDesc(String desc) {
* this.desc = desc;
* }
* }
* </code>
* can use the annotation as <code>@Enum(clazz = Role.class, method = "getValue")</code>,
* and param role = 1; Or use the annotation as <code>@Enum(clazz = Role.class,
* method = "getDesc")</code>,and param role = "ADMIN";
*
* @author Muscleape
* @ClassName EnumValidate.java
* @Description Controller入参对象中属性枚举项校验
* @createTime 2020年03月18日 14:45:00
*/
@Documented
@Target({
METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE})
@Retention(RUNTIME)
@Repeatable(EnumValidation.List.class)
@Constraint