springboot实现枚举参数
基础的枚举接口
java
public interface BaseEnum<K, V> {
/**
* 获取值
*
* @return {@link K}
*/
@JsonValue
K getValue();
/**
* 获取描述
*
* @return {@link V}
*/
V getDescription();
@JsonCreator
BaseEnum<K, V> find(K value);
}
枚举工具类
java
public class BaseEnumUtil {
/**
* 代码
*
* @param enumClass 枚举类
* @param code 密码
* @return {@link E}
*/
public static <E extends BaseEnum<Object, Object>> E codeOf(Class<E> enumClass, Object code) {
E[] enumConstants = enumClass.getEnumConstants();
for (E e : enumConstants) {
if (e.getValue().toString().equals(code.toString())) {
return e;
}
}
return null;
}
public static <E extends BaseEnum> E codeOf(E[] values, Object code) {
for (E e : values) {
if (e.getValue().equals(code)) {
return e;
}
}
return null;
}
}
1. json(以jackson为例)
BaseEnum接口中
@JsonValue
和@JsonCreator
是 Jackson JSON 处理库中的两个注解,它们用于在序列化
和反序列化
过程中定制 Java 对象与 JSON 数据之间的映射。
示例枚举:
java
@AllArgsConstructor
@Getter
public enum StatusEnum implements BaseEnum<Integer, String> {
/**
* 是
*/
YES(1, "是"),
/**
* 否
*/
NO(0, "否"),
;
private final Integer value;
private final String description;
@Override
public String toString() {
return value.toString();
}
@Override
public BaseEnum<Integer, String> find(Integer value) {
return BaseEnumUtil.codeOf(values(),value);
}
}
2. 表单参数
通过实现
org.springframework.core.convert.converter.Converter
的方法
- 转换类
java
@RequiredArgsConstructor
public class EnumConverter<E extends BaseEnum<Object, Object>> implements Converter<String, E> {
private final Class<E> enumType;
/**
* 转换
*
* @param s s
* @return {@link E}
*/
@Override
public E convert(@NonNull String s) {
return BaseEnumUtil.codeOf(this.enumType, s);
}
}
- 转换工厂
java
@Component
@NoArgsConstructor
public class EnumConverterFactory implements ConverterFactory<String, BaseEnum<Object, Object>> {
/**
* 获取转换器
*
* @param targetType 目标类型
* @return {@link Converter}<{@link String}, {@link T}>
*/
@NonNull
public <T extends BaseEnum<Object, Object>> Converter<String, T> getConverter(@NonNull Class<T> targetType) {
return new EnumConverter<>(targetType);
}
}
- MVC配置
java
@Configuration
@RequiredArgsConstructor
public class SpringMvcConfig implements WebMvcConfigurer {
private final EnumConverterFactory enumConverterFactory;
/**
* 添加格式化程序
*
* @param registry 注册表
*/
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverterFactory(this.enumConverterFactory);
}
}