后端接口枚举值和对应的描述是如何返回的?

206 天前
 kqq19930511

例如有以下的枚举值:

DANGER(0, "危急"),
SERIOUS(1, "严重"),
GENERAL(2, "一般")

大家平时开发用的什么方案?或者 java springboot 中有通用的解决方案吗?

3323 次点击
所在节点    Java
37 条回复
andy2415
206 天前
使用 @EnumValue
importmeta
206 天前
前端不用管, 后端自己查, 加个字段返给前端,碰见过这样的.
lambdaq
206 天前
非 java 。
我一般是返回 code: 0, code_name: 危急

这个定义,如果不经常变,就写到代码里作为枚举。如果随着业务会增改,会放到 db 字典表。

感觉是你 2 3 方法的结合。1 4 都麻烦了。
lyxxxh2
206 天前
一直都是第一种,api 文档,将后端常量代码 cv 上去就行。
至于新增一个枚举重新部署,你不说我都不知道。
一开始都设计好了,新增很少,而且枚举也没几个。

数据库我都不用枚举,更喜欢用`UNSIGNED TINYINT`。
不然新增个枚举元素,还得生成迁移改数据库。
git00ll
205 天前
就 1, 一次尽量定义全,万一需要加就拉着前端一起加。
万一是各个国家的语言还要后端写死在代码里吗
Plutooo
205 天前
如果有当前页面导出的功能,那么最好后端自己转好,不然导出还是要重新写一遍
如果没有导出的,可以把字典表做成一个单独的接口返回给前端
kinkin666
205 天前
主要是 1 、3 ,

关于 1 ,因为没有 i18n 需求,我们这里前端相对不动,前端根据 code 兜底显示成功失败告警,具体对客描述还是要服务端返回的,特殊流程要约定具体的 code 要干嘛
关于 3 ,主要是用作单选框复选框的列表值,配在这里的东西都是假设前端可以在无权限的情况下拿到的(实际上还需要字典代码)(我给这个功能套的是 guava 的缓存,前端那边自己也缓存了一下,每次只加载一次)

不认为将所有枚举值列表不作区分的返回到前端是一个好做法,暴露的信息有点多!
如果未来有 i18n 需求,恐怕也是前端干前端的,后端干后端的
kqq19930511
205 天前
@w292614191 #14 学习一下这个方案
oldManNewThought
205 天前
第 5 种:具体接口返回数值。另外单独提供接口获取相应枚举列表。前端封装一个字典组件,只需要传入枚举名称,组件里根据名称去后端查询枚举列表,组件里做了缓存,不需要一直查询。这方案,目前我感觉是最完美的
wangtian2020
205 天前
没有银弹

我的做法是返回值一定是 200 的,
然后在 json 里 code 区分 500 啥的
然后根据不同的 json 对象的 code ,弹 error 或者 warning 弹窗,把 message 弹出来。返回 message 的语言类型可以由请求头控制
guiling
205 天前
我们管理后台类的项目目前就是类似 4 的方案,因为枚举前端大概率还是要存一份的,比如表单下拉搜索这种,不过都是业务需要动态创建的枚举,静态的那种没必要

前端组件做优化,防抖+缓存,相同枚举接口短时间内不会重复请求,根据变动频率设置缓存时间
chenuu
205 天前
@JsonValue
public Object toJson() {
return new EnumJson(this.ordinal(), this.name(), this.desc);
}
ShirOvO
205 天前
用反射,以前写过一个通用返回枚举的接口,传参枚举名,在后端找到对应的类,通过反射实现获取枚举值
Nitsuya
205 天前
4 + swagger 会生成使用 Key 对应的名称.
前端只需要用组件 把 key 和值传进去..
guanhui07
205 天前
没银弹 一般都 1 然后写好接口文档
blessingcr
205 天前
4
设计一个字典表,支持在管理后台修改,其他需要的页面传参拉取对应的字典枚举就行了。
scalpel666
205 天前
用字典表,后端只需要返回数字就行,前端对应的字段只需要绑定字典编码直接查字典表转换就行

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1112535

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX