时间:2011-01-06 16:22:36

标签: java spring spring-mvc

5 个答案:

答案 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中的第一个结果。