背景
B/S架构项目,前后端分离开发,往往有很多枚举需要交代给前端做成下拉或者渲染
前端写死的弊端很多,比如失误造成的键、值错误,修改时要前后端都改等
为每个枚举写个接口,会好很多,但重复工作太多了,还是很蠢。
思路
前端做下拉或者渲染所需的源数据,可以全部调用同一个接口,形如:
@GetMapping("enum/{className}")
后端写好枚举后,把枚举的类名告诉前端,就可以了
实现
把枚举转为前端可用的源数据
一段很简单的反射代码,就可以把枚举变成List>这样的对象了:
List> getEnumByClassName(String className) {
List> list = new ArrayList<>();
// 1.得到枚举类对象
Class clz = optionalEnumMap.get(className);
Object[] objects = clz.getEnumConstants();
if (objects != null && objects.length != 0) {
Method[] methods = clz.getMethods();
for (Object obj : objects) {
Map map = new HashMap<>();
if (methods.length != 0) {
for (Method method : methods) {
String name = method.getName();
if ("getClass".equals(name) || "getDeclaringClass".equals(name)) {
continue;
}
if (name.startsWith("get")) {
try {
map.put(name.substring(3, 4).toLowerCase() + name.substring(4), method.invoke(obj));
} catch (IllegalAccessException