答案 0 :(得分:23)
答案 1 :(得分:17)
答案 2 :(得分:13)
还可以创建一个适用于所有Enum的通用转换器:
public class CaseInsensitiveConverter<T extends Enum<T>> extends PropertyEditorSupport {
private final Class<T> typeParameterClass;
public CaseInsensitiveConverter(Class<T> typeParameterClass) {
super();
this.typeParameterClass = typeParameterClass;
}
@Override
public void setAsText(final String text) throws IllegalArgumentException {
String upper = text.toUpperCase(); // or something more robust
T value = T.valueOf(typeParameterClass, upper);
setValue(value);
}
}
用法:
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(MyEnum.class, new CaseInsensitiveConverter<>(MyEnum.class));
}
或全球范围内的skaffman解释
答案 3 :(得分:7)
答案 4 :(得分:6)
在Spring Boot 2中,您可以使用String
。它提供了一些有用的转换器,尤其是ApplicationConversionService
-负责将字符串值转换为枚举实例。这是最通用的(我们不需要为每个枚举创建单独的转换器/格式化程序)和我设法找到的最简单的解决方案。
org.springframework.boot.convert.StringToEnumIgnoringCaseConverterFactory
我知道问题与春季3有关,但这是搜索import org.springframework.boot.convert.ApplicationConversionService;
import org.springframework.context.annotation.Configuration;
import org.springframework.format.FormatterRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class AppWebMvcConfigurer implements WebMvcConfigurer {
@Override
public void addFormatters(FormatterRegistry registry) {
ApplicationConversionService.configure(registry);
}
}
短语时google中的第一个结果。