后端接口枚举值和对应的描述是如何返回的?
例如有以下的枚举值:
DANGER(0, "危急"),
SERIOUS(1, "严重"),
GENERAL(2, "一般")
第一种方法:只返回对应的数值,前端根据数值转换为中文描述,但是存在一个缺陷:添加新的枚举值后,前端需要重新部署
第二种方法:定义一个包装对象,添加一个描述属性,然后循环遍历所有对象,将枚举值转换为中文描述值
第三种方法:数据库中有通用字典表,将枚举值写入到数据库中,查询时关联字典表,查出描述值
第四种方法:返回对象列表和枚举值列表,让前端自己组合两个对象,展示到页面上
大家平时开发用的什么方案?或者 java springboot 中有通用的解决方案吗?
我这边大概这样:
权限类经常改的用 2
大部分情况 status,type 类的用 1(一般后端添加了枚举后,前端也得做对应界面功能,不然为啥要改)
一般场景 enum 存储 SERIOUS 字符串,存储一般情况都不值钱。不太变动的场景直接返回,经常变动的返回 desc 以及 enum 字符串
一般用方法 1 吧,除了 4 都可行,如果字典和数据要独立,那应该拆分成两个接口
#1 第二种有通用解决方案吗?每次都得遍历去设置描述?
#3 如果拆开,每次前端展示列表的页面,都得请求两次接口才能展示了,合并成一个不好吗?
不符合设计原则,碰到分页场景也不好处理,另外请求两次不一定就比请求一次慢
第二种,用 AOP+注解实现
#4 转成 map
#7 自己实现的?还是有开源解决方案
我们做法是返回:code (枚举值)、desc (对应 code 描述)
存储有本地、缓存、数据库,达到后端更新,前端不需要改动。
以及 desc 描述,国际化多语言,搭配 i18n
没有专门的枚举字典接口?
#10 返回结果如何组织的?方案二还是方案四?
我一般是具体的数据返回 State:枚举值,返回 StateDescription:具体的描述内容。
接口文档列举所有的枚举值和描述。
可以看下这个: crane4j.cn/
但实际业务中还是比较复杂,都是前端转一遍。
类似这样,前端直接展示就行
[{
"code": 0,
"desc": "危急"
}]
业务复杂后,设计一个字典表,支持在管理后台修改,其他需要的页面传参拉取对应的字典枚举就行了。
自定义序列化返回枚举对象,返回{"code":0,"name":"危急"},另外再提供一个字典接口
第一种, 重新部署就是多会摸鱼时间呗.自己业余时间全栈项目也是第一种, 后端用的 Nest.js, 对象,枚举 直接往前端复制.没啥成本.
业务前期不需要设计字典表,浪费人力资源,把枚举映射发给前端即可
用的 jeecgboot 框架,它有单独的字典表,每次启动的时候会缓存到 redis 里。之后前端在登录后好像会调用字典接口获取所有字典项。最后还用 aop+注解自动给加了字典注解的字段额外返回一个叫做 [原字段名_dictText] 的字段,里面放的是字段 code 对应的描述,这样前端调用列表查询接口就不用额外再查直接显示就行
使用
前端不用管, 后端自己查, 加个字段返给前端,碰见过这样的.
非 java 。
我一般是返回 code: 0, code_name: 危急
这个定义,如果不经常变,就写到代码里作为枚举。如果随着业务会增改,会放到 db 字典表。
感觉是你 2 3 方法的结合。1 4 都麻烦了。
以前酷壳发布过《操作系统航空公司》戏谑了一下如果操作系统是航空公司会怎么样的一种情况。现在,我们来YY一下编程语言,如果编程语言是汽车,又会怎么样? Ada 这是一辆坦克。…
我没进群,扫码登录提示需要内测权限,密码登录没问题。 支持好友传文件,QQ 空间,总体功能还是比 Icalingua++ 略多一点的。 PS:最近发现国内有一个 星火应用商店…
摘要:这篇文章的原文出处在这里 我意译了整篇文章。结合计算机语言评测基准这个网站来读此文还是比较有意思。当然也不能以这个评测结果就贸然断定什么语言最好,什么语言不好。没有好不好…