Обобщить Spring @initbinder для всех классов Enum в проекте - PullRequest
0 голосов
/ 08 июля 2019

У меня есть проект 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));
            }
        });
    }
  1. Я бы хотел достичь двух вещей: поместить этот фрагмент кода куда-нибудь где это относится ко всем контроллерам в моем проекте
  2. Сделать этот фрагмент кода общим для всех типов 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));
                }
            });
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...