public class EnumConverter<T extends Enum> implements Converter<String, T> { private Class<T> enumType; public EnumConverter(Class<T> enumType) { this.enumType = enumType; } @Override public T convert(String source) { if (source.length() == 0) { return null; } return (T) enumType.getEnumConstants()[Integer.parseInt(source)]; } } @Component public class EnumConverterFactory implements ConverterFactory<String, Enum> { @Override public <T extends Enum> Converter<String, T> getConverter(Class<T> targetType) { return new EnumConverter(targetType); } }
@Configuration public class MvcConfigure implements WebMvcConfigurer { @Autowired private EnumConverterFactory enumConverterFactory; @Override public void addFormatters(FormatterRegistry registry) { registry.addConverterFactory(enumConverterFactory); } }