springmvc枚举参数绑定 springboot 枚举类型处理
本文介绍如何在 Spring Boot 项目中使用自定义注解实现通用的枚举类型校验。通过 Java引用机制,我们可以创建一个可以校验不同枚举类型的校验注解,从而简化代码并提高可维护性。本文将提供详细的代码示例和步骤,帮助你理解并实现这一功能。创建自定义注解
首先,我们需要创建一个自定义注解,该注解将接收需要校验的枚举类型作为参数。import javax.validation.Constraint;import javax.validation.Payload;import java.lang.annotation.*;@Target({ElementType.FIELD, ElementType.PARAMETER})@Retention(RetentionPolicy.RUNTIME)@Documented@Constraint(validatedBy = EnumValidator.class)public @interface EnumValidation { String message() default quot;无效的枚举值";; Classlt;?gt;[] groups() default {}; Classlt;? extends Payloadgt;[] payload() default {}; Classlt;? extends Enumlt;?gt;gt; enumClass(); // 指定需要校验的枚举类型}登录后复制
在本注解中,enumClass属性用于指定需要校验的枚举类型。创建校验器
接下来,我们需要创建一个校验器,该校验器将使用 Java 传入验证输入值是否为指定枚举类型的有效值。
导入 javax.validation.ConstraintValidator;导入 javax.validation.ConstraintValidatorContext;导入 java.util.Arrays;导入 java.util.List;导入 java.util.stream.Collectors;公共类 EnumValidator 实现 ConstraintValidatorlt;EnumValidation,Stringgt; { 私有 Listlt;Stringgt; enumValues; @Override public void initialize(EnumValidation constraintAnnotation) { Classlt;? extends Enumlt;?gt;gt; enumClass = constrainAnnotation.enumClass(); enumValues = Arrays.stream(enumClass.getEnumConstants()) .map(Enum::name) .collect(Collectors.toList()); } @Override public boolean isValid(String value, ConstraintValidatorContext context) { if (value == null) { return true; //允许空值,如果需要允许,可以在注解中添加 @NotNull } return enumValues.contains(value); }}登录后复制
在这个校验器中,初始化方法用于获取注解中指定的枚举类型的所有枚举值,把它们存储在一个列表中。isValid 方法用于验证输入值是否在这个列表中。使用示例
现在,我们可以在 DTO 中了类中使用这个自定义注解来验证枚举类型的值。
假设我们有一个名为 MyEnum 的枚举类型:public enum MyEnum { VALUE1, VALUE2, VALUE3}登录后复制
,然后我们可以在 DTO 类中使用 @EnumValidation 注解来验证 myEnumValue 字段:import javax.validation.constraints.NotBlank;public class MyDto { @NotBlank @EnumValidation(enumClass = MyEnum.class, message = quot;无效的 MyEnum valuequot;) private String myEnumValue; public String getMyEnumValue() { return myEnumValue; } public void setMyEnumValue(String myEnumValue) { this.myEnumValue = myEnumValue; }}登录后
现在复制,当 Spring Boot 验证 MyDto 对象时,如果 myEnumValue 字段的值不是 MyEnum枚举类型的有效值,将引发一个校验异常。注意事项确保在 Spring Boot 项目中启用了 Bean Validation。通常情况下,只需要在 pom.xml 文件中添加 spring-boot-starter-validation 依赖即可。lt;dependencygt; lt;groupIdgt;org.springframework.bootlt;/groupIdgt; lt;artifactIdgt;spring-boot-starter-validationlt;/artifactIdgt;lt;/dependencygt;登录后复制可以根据实际需求自定义注解的消息复制属性,便于提供更习惯的错误提示信息。isValid方法中对value == null进行了处理,可以根据实际需求修改为不允许null值。总结
通过使用自定义注释解和Java引用,我们实现一个通用的枚举类型可以校验器,该校验器可以获取不同的枚举类型。这样可以简化代码并提高可维护性。希望本文能够帮助你理解并实现这个功能。
以上就是Spring Boot中实现通用枚举类型校验的内容,更多请关注乐哥详细常识网其他相关文章!