Как динамически генерировать тип перечисления из mysql в приложении Java spring boot?

#java #spring #enums

Вопрос:

В моем проекте мы хотим управлять всеми ошибками API REST в типе перечисления,например,следующим кодом:

 package com.example.util
public enum ErrorType{
  SUCCESS("0000", "success")
  PARAMS_EMPTY("3001", "params cannot be empty")
}
 

Проблема,с которой мы сталкиваемся,заключается в том,что если мы помещаем класс в пакет util, каждый раз, когда мы добавляем новый тип ошибки в приложение для загрузки business spring, нам нужно будет изменять, публиковать и перекомпилировать приложение и проект util.Это было бы трудно поддерживать в рабочем состоянии пакет util.В принципе,мы предпочитаем поддерживать относительно стабильный пакет утилит.

Поэтому мы рассматриваем возможность динамического создания типа перечисления,мы можем заранее настроить информацию об ошибках в mysql,а затем загрузить их в тип перечисления в процедуре загрузки приложения.

Я не уверен,что это хорошая идея для динамического создания типа перечисления в Java, или если есть лучшее решение для этой проблемы.

Ответ №1:

Вы не можете добавлять или удалять значения из перечисления. Перечисления-это полные статические перечисления.

Если вам нужно обрабатывать значения переменных, вам нужно работать со стандартным классом.

Например, у вас может быть что-то вроде следующего:

 public Error {
   public static Error getByName(String name) {
        ....
   }

   public static Error getByCode(int code) {
        ....
   }
}
 

и используйте его следующим образом:

  Error myError404 = Error.getByCode(404);
 

Очевидно, что этот код дает вам большую гибкость, но вы не можете заранее знать, существует ли конкретный код ошибки или нет. И вы не можете использовать средства ide, связанные с перечислениями.

Ответ №2:

Я думаю, что создание перечисления было бы не так полезно, поскольку часть возможностей перечислений заключается в том, что вы можете использовать их статически в своем коде — так что вам все равно придется обновлять свой код.

Как насчет добавления обработчика исключений в вашу библиотеку util, который может быть заполнен кодами ошибок / сопоставлениями описаний из базы данных, которые затем могут преобразовывать ошибки/исключения в коды ответов / сообщения об ошибках для вашего API? (просто предполагаю, что у вас здесь есть api 🙂 )

Ответ №3:

Спасибо за ваш ответ,мы, наконец, решаем отказаться от этой идеи.Динамическое создание перечисления не поможет,на самом деле это добавит больше сложности нашему проекту,это не обычное использование перечисления. Вместо этого мы заранее определяем наш основной тип ошибок,например user_error,system_error и db_error и т. Д.Конкретная информация об ошибке будет обработана в бизнес-службе.