SpringBoot枚举类型参数认证的实现代码
背景
项目当中经常需要接口参数是否在一个可选的范围内,也就是验证类枚举参数的需求。
如果参数类型是String类型,那么可以使用@Pattern注解,就是用正则进行匹配,比如:
@Pattern(regex = "^(male|female)$", message = "性别不合法") private String gender;
但是如果参数类型不是String类型,就不能使用@Pattern了。SpringBoot的validation中并没有提供针对这种枚举值的校验注解。
接下来我们来自己实现一个。
定义枚举类
为了后续可以方便获取枚举值,我们的枚举类需要实现一个interface,就叫ValueEnum:
public interface ValueEnum { Interger getValue(); }
定义枚举:
@Getter @RequiredArgsConstructor public enum Gender implements ValueEnum { MALE(1, "男"), FEMALE(2, "女"); private final Integer value; private final String name; }
定义校验注解
@Target( FIELD ) @Retention(RUNTIME) @Documented @Constraint(validatedBy = EnumValueValidator.class) public @interface EnumValue { String message() default "参数值不合法"; Class<? extends ValueEnum> enumClass(); Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; }
这里指定了校验器EnumValueValidator,接下来定义这个。
定义EnumValueValidator
public class EnumValueValidator implements ConstraintValidator<EnumValue, Integer> { private EnumValue enumValue; @Override public boolean isValid(Integer value, ConstraintValidatorContext context) { Class<? extends ValueEnum> enumClass = enumValue.enumClass(); return Arrays.stream(enumClass.getEnumConstants()).anyMatch(i -> Objects.equals(i.getValue(), value)); } @Override public void initialize(EnumValue enumValue) { this.enumValue = enumValue; } }
在代码中使用
@EnumValue(enumClass = Gender.class) private Integer gender;
到此这篇关于SpringBoot枚举类型参数认证的实现代码的文章就介绍到这了,更多相关SpringBoot枚举类型参数认证内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
IDEA配置maven环境的详细教程(Unable to import maven project报错问题的解决)
这篇文章主要介绍了IDEA配置maven环境的详细教程(Unable to import maven project问题的解决),本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-06-06
最新评论