状态的枚举类
public enum State implements IEnum{
enabled(0,"正常"),
disabled(1,"已注销"),
risk(2,"风险")
; private final Integer value; private final String display;
State( Integer value, String display) { this.value = value; this.display = display;
} @Override
public String getByName() { return name();
}
}现在我希望当前端通过如下接口传递"test/state?state=enabled"参数的时候,可以获取到状态对应的枚举
@RequestMapping("test/state") public String testEnum(State state){ //todo
return "";
}那么我们需要做做如下代码实现
public class StringToEnumConverterFactory implements ConverterFactory<String, IEnum> { @Override
public <T extends IEnum> Converter<String, T> getConverter(Class<T> aClass) { return new StringToEnumConverter<>(aClass);
} //将字符串转换成枚举来
private final class StringToEnumConverter<T extends IEnum> implements Converter<String, T> { private Class<T> enumType; public StringToEnumConverter(Class<T> enumType) { this.enumType = enumType;
} @Override
public T convert(String s) { for (T t : enumType.getEnumConstants()) { if (t.getByName().equals(s)) { return t;
}
} return null;
}
}
}同时把这个处理器注册到Spring的容器中即可
@Configurationpublic class WebAppConfigurer implements WebMvcConfigurer { @Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverterFactory(new StringToEnumConverterFactory());
}
}
作者:eejron
链接:https://www.jianshu.com/p/5b830bd6b164