springboot中枚举注解
时间: 2025-01-10 09:39:17 浏览: 57
### Spring Boot 中与枚举相关的注解及其用法
#### 枚举类型的定义和使用
在Spring Boot项目中,可以通过创建实现`IBaseEnumParam`接口的枚举类来管理业务逻辑中的固定选项。该接口提供了获取枚举项对应的编码值和描述信息的方法[^3]。
```java
public enum Status implements IBaseEnumParam<Integer> {
SUCCESS(0, "成功"),
ERROR(-1, "失败");
private final Integer code;
private final String desc;
Status(Integer code, String desc) {
this.code = code;
this.desc = desc;
}
@Override
public Integer getCode() {
return code;
}
@Override
public String getDesc() {
return desc;
}
}
```
#### 自定义校验注解用于参数验证
对于需要确保传入参数属于预设范围的情况,可以利用自定义注解配合AOP技术完成自动化的参数合法性检测。这里展示了一个简单的例子,在控制器层接收请求时检查指定字段是否存在于给定的枚举集合内[^4]。
##### 定义校验注解
首先声明一个新的注解类型:
```java
import javax.validation.Constraint;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
@Target({ ElementType.METHOD, ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = EnumValidator.class)
public @interface ValidStatus {
Class<? extends Enum<?>> value();
String message() default "{ValidStatus.message}";
}
```
接着编写具体的检验器组件负责实际的数据合规性评估工作:
```java
@Component
public class EnumValidator implements ConstraintValidator<ValidStatus, Object> {
private Set<Object> validValues = new HashSet<>();
@Override
public void initialize(final ValidStatus constraintAnnotation) {
Arrays.stream(constraintAnnotation.value().getEnumConstants())
.forEach(e -> validValues.add(((Enum)e).name()));
}
@Override
public boolean isValid(Object object, ConstraintValidatorContext context){
return validValues.contains(object);
}
}
```
最后可以在DTO对象上标注此注解来进行约束:
```java
public class ResponseDTO {
@ValidStatus(value=Status.class,message="无效的状态码")
private int status;
// getter setter...
}
```
这样当有不符合条件的数据提交上来的时候就会触发异常提示并返回错误消息给前端页面显示出来。
阅读全文
相关推荐


















