У меня есть проект Java 8, использующий стек Spring Boot. Для гибкого преобразования входной строки в типы Enum в настоящее время я использую следующий фрагмент, который объясняется в этом blogpost :
@InitBinder
public void initBinder(final WebDataBinder webdataBinder)
{
webdataBinder.registerCustomEditor(ProductType.class, new PropertyEditorSupport()
{
public void setAsText(final String text) throws IllegalArgumentException
{
setValue(EnumFactory.fromString(ProductType.class, text));
}
});
}
- Я бы хотел достичь двух вещей: поместить этот фрагмент кода куда-нибудь
где это относится ко всем контроллерам в моем проекте
- Сделать этот фрагмент кода общим для всех типов Enum в одном базовом пакете, который сканировал Spring, т. Е. «Com.mycompany.project»)
Во-первых, правильно ли я предположить, что я могу использовать этот код для любого фиктивного класса с аннотацией @Configuration
, чтобы его можно было взять, или он должен быть конкретно в классе контроллера?
Во-вторых, я мог бы переработать фрагмент, как этот, но я застрял при получении всех классов Enum из определенного пакета (включая подпакеты).
@InitBinder
public void initBinder(final WebDataBinder webdataBinder)
{
Collection<Class> allEnumClasses = ...? //scan myself? filter on Enum?
for(Class clazz : allEnumClasses)
{
webdataBinder.registerCustomEditor(clazz, new PropertyEditorSupport()
{
public void setAsText(final String text) throws IllegalArgumentException
{
setValue(EnumFactory.fromString(clazz, text));
}
});
}
}