SpringBoot自定义枚举类型参数校验
在Spring Boot中,你可以使用@Validated
注解和自定义的注解来对枚举类型参数进行验证。以下是一个简单的例子:
首先,定义一个用于验证枚举值的注解和其验证器:
// 自定义注解
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = EnumValueValidator.class)
public @interface EnumValue {
String message() default "Invalid enum value";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
Class<? extends Enum<?>> enumClass();
}
// 注解的验证器
public class EnumValueValidator implements ConstraintValidator<EnumValue, Object> {
private Class<? extends Enum<?>> enumClass;
@Override
public void initialize(EnumValue enumValue) {
this.enumClass = enumValue.enumClass();
}
@Override
public boolean isValid(Object value, ConstraintValidatorContext context) {
if (value == null) {
return true;
}
for (Enum<?> enumItem : enumClass.getEnumConstants()) {
if (enumItem.name().equals(value.toString())) {
return true;
}
}
return false;
}
}
然后,在你的控制器中使用这个注解来验证枚举类型的参数:
// 枚举示例
public enum Color {
RED, GREEN, BLUE
}
// 控制器方法示例
@RestController
public class MyController {
@PostMapping("/color")
public ResponseEntity<?> getColor(@@Validated @EnumValue(enumClass = Color.class) @RequestParam String color) {
// 处理请求逻辑
return ResponseEntity.ok("Color is valid");
}
}
在这个例子中,我们定义了一个EnumValue
注解和它的验证器EnumValueValidator
。在控制器的方法参数上使用@EnumValue
注解,指定enumClass
属性为你的枚举类。当请求到达控制器方法时,Spring Framework会自动使用@Validated
注解触发验证过程。如果参数不是有效的枚举值,则会返回错误信息。
评论已关闭