如何在 Java spring 启动应用程序中从 mysql 动态生成枚举类型?
How to dynamic generate Enum type from mysql in Java spring boot application?
在我的项目中,我们希望以枚举类型管理所有 REST API 错误代码,如以下代码:
package com.example.util
public enum ErrorType{
SUCCESS("0000", "success")
PARAMS_EMPTY("3001", "params cannot be empty")
}
我们遇到的问题是,如果我们把class放到util包里,每次在业务springboot app中添加一个新的错误类型,都需要修改发布重新编译应用程序和实用程序project.That很难维护实用程序package.Basically,我们更愿意维护一个相对稳定的实用程序包。
所以我们在考虑有没有一种方法可以动态生成Enum类型,我们可以提前在mysql中配置错误信息,然后在应用程序启动过程中将它们加载到enum类型中。
我不确定在 Java 中动态生成枚举类型是否是个好主意,或者是否有更好的解决方案来解决这个问题。
我认为生成枚举不会那么有用,因为枚举的部分强大功能是您可以在代码中静态地使用它们 - 所以无论如何您都必须更新代码。
如何向您的 util 库添加一个异常处理程序,它可以填充来自数据库的错误代码/描述映射,然后可以将 errors/exceptions 转换为您的 [=15= 的响应代码/错误消息]? (只是猜测你在这里有一个 api :-) )
您不能在枚举中添加或删除值。枚举是完整的静态枚举。
如果您需要处理变量值,您需要使用标准 class。
例如你可以有类似下面的东西:
public Error {
public static Error getByName(String name) {
....
}
public static Error getByCode(int code) {
....
}
}
并按如下方式使用它:
Error myError404 = Error.getByCode(404);
显然,此代码为您提供了很大的灵活性,但您无法提前知道特定错误代码是否存在。而且您不能使用 ide 与枚举相关的功能。
感谢您的回复,我们最终决定放弃这个 idea.Dynamic 生成一个枚举无济于事,实际上它会增加我们项目的复杂性,这不是枚举的常用用法。
取而代之的是,我们预定义了我们的主要错误类型,如 user_error、system_error 和 db_error、etc.The,具体的错误信息将在业务服务中处理。
在我的项目中,我们希望以枚举类型管理所有 REST API 错误代码,如以下代码:
package com.example.util
public enum ErrorType{
SUCCESS("0000", "success")
PARAMS_EMPTY("3001", "params cannot be empty")
}
我们遇到的问题是,如果我们把class放到util包里,每次在业务springboot app中添加一个新的错误类型,都需要修改发布重新编译应用程序和实用程序project.That很难维护实用程序package.Basically,我们更愿意维护一个相对稳定的实用程序包。
所以我们在考虑有没有一种方法可以动态生成Enum类型,我们可以提前在mysql中配置错误信息,然后在应用程序启动过程中将它们加载到enum类型中。
我不确定在 Java 中动态生成枚举类型是否是个好主意,或者是否有更好的解决方案来解决这个问题。
我认为生成枚举不会那么有用,因为枚举的部分强大功能是您可以在代码中静态地使用它们 - 所以无论如何您都必须更新代码。
如何向您的 util 库添加一个异常处理程序,它可以填充来自数据库的错误代码/描述映射,然后可以将 errors/exceptions 转换为您的 [=15= 的响应代码/错误消息]? (只是猜测你在这里有一个 api :-) )
您不能在枚举中添加或删除值。枚举是完整的静态枚举。
如果您需要处理变量值,您需要使用标准 class。
例如你可以有类似下面的东西:
public Error {
public static Error getByName(String name) {
....
}
public static Error getByCode(int code) {
....
}
}
并按如下方式使用它:
Error myError404 = Error.getByCode(404);
显然,此代码为您提供了很大的灵活性,但您无法提前知道特定错误代码是否存在。而且您不能使用 ide 与枚举相关的功能。
感谢您的回复,我们最终决定放弃这个 idea.Dynamic 生成一个枚举无济于事,实际上它会增加我们项目的复杂性,这不是枚举的常用用法。 取而代之的是,我们预定义了我们的主要错误类型,如 user_error、system_error 和 db_error、etc.The,具体的错误信息将在业务服务中处理。