在我的项目中,我们希望以Enum类型管理所有REST api错误码,如以下代码:
package com.example.util
public enum ErrorType{
SUCCESS("0000", "success")
PARAMS_EMPTY("3001", "params cannot be empty")
}
我们遇到的问题是,如果我们把类放入util包中,每次我们在业务春季启动应用程序中添加新的错误类型时,我们都需要修改,发布和重新编译应用程序和util项目。这将很难维护util包。基本上,我们更倾向于维护一个相对稳定的实用程序包。
所以我们正在考虑是否有一种方法可以动态地生成Enum类型,我们可以提前在mysql中配置错误信息,然后我们可以在应用程序启动过程中将它们加载到Enum类型。
我不确定在Java中动态生成枚举类型是否是个好主意,或者是否有更好的解决方案。
不能在枚举中添加或删除值。枚举是完整的静态枚举。
如果你需要处理变量值,你需要使用一个标准类。
例如,你可以这样写:
public Error {
public static Error getByName(String name) {
....
}
public static Error getByCode(int code) {
....
}
}
,并按如下方式使用:
Error myError404 = Error.getByCode(404);
显然这段代码给了你很大的灵活性,但是你不能提前知道一个特定的错误代码是否存在。并且不能使用与枚举相关的ide工具。
我认为生成枚举并不是那么有用,因为枚举的部分功能是您可以在代码中静态地使用它们-因此无论如何您都必须更新代码。
如何添加一个异常处理程序到您的util库,可以填充错误代码/描述映射从数据库,然后可以翻译错误/异常响应代码/错误消息为您的API?(只是猜测你在这里有一个API:-))
感谢您的回复,我们最终决定放弃这个想法。动态生成一个enum没有帮助,实际上它会给我们的项目增加更多的复杂性,这不是enum的常用用法。相反,我们预定义了主要的错误类型,如user_error、system_error和db_error等。具体的错误信息将在业务服务中处理。