问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

优雅的实现前端回显字典枚举值

发布网友 发布时间:2023-07-10 03:55

我来回答

1个回答

热心网友 时间:2024-12-04 13:34

Hello 大家好,这里是Anyin。

在我们日常的开发工作当中,肯定会遇到类似状态、类型等字段需要以中文的形式返回给前端。例如,在数据库中性别是存储man、woman,而在前端界面显示要求是显示成男、女。

在实现以上需求会有以下几种方式

1.业务代码或者get方法中转义,即在业务代码通过判断然后转换成对应的中文或者在返回的实体类中get方法中判断返回对应的中文

2.所有的字典值入库,通过数据库left join 实现中文意思查询,返回的时候添加一个中文的字段

3.在spring mvc 返回的时候通过序列化转换,但是需要在返回的实体类添加对应的注解元数据信息

4.前端拉取所有的字典类型和对应的值,在页面渲染的时候自行处理,会在前端缓存暴露所有的字典数据

在以上4个方法中,第3种方式会比较合适,因为它会统一处理所有的字典值,并且屏蔽对业务代码的影响,同时在安全性也有一定的保证。

在实现代码之前,我们梳理下思路。

1.在spring mvc 把实体类序列化的时候我们进行一顿操作

2.以对象的形式返回对应的字典信息,并且字段名不变,例如: status 字段,实体类是一个 String 类型,返回前端的时候变为一个对象: status : { code: "enable", text: "启用" }

3.通过自定义注解来指定是某个类型的字典值

4.通过 @JsonSerialize 注解指定自定义序列化器

根据以上思路,我们可以在 @JsonSerialize 注解上看到一个 using 的属性,它指定了一个 Class<? extends JsonSerializer 的类型。

所以,我们可以自己定义一个序列化器继承 JsonSerializer 类。

serialize 方法的 value 参数,就是我们需要转为字典对象的code值。但是我们还缺少一样信息,这个code值是属于那个类型的字典,是属于 sex 还是 status 类型的字典?

所以,这个类还要实现 ContextualSerializer 接口,从 BeanProperty 属性中获取对应的注解。

完整的 StringAsDictSerializer 类的代码如下:

接着再新增一个自定义注解

这个自定义注解的 type 字段即表示字典的类型,一般情况下数据库的字典字段在代码都会有一个对应的枚举类。

最后我们定义下需要返回给前端的字典对象

接下来,我们来测试下我们的代码。在 controller 返回的实体类中,我们添加上对应的注解配置,如下:

使用postman返回结果:

以上,我们实现了字典枚举值的前端字典回显,你学废了吗?

相关源码地址 Anyin Cloud[1]

[1] Anyin Cloud: https://gitee.com/anyin/anyin-cloud
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
水笔在手上画画会不会被衣服搽掉下来 老人每天大便次数很多量不多也不稀,每天还会拉三四次水应经三个月了... 从大连飞机场怎么去大连经济开发区5彩城K区的大连金港大酒店 除了打 ... 请问从大连周水子国际机场到经济技术开发区怎么走最省钱? 中国古代名刀总录中国古代十大名刀 怎样把qq安装到iphone里面 苏科大什么梗 苏科大叫什么名字 lol苏科大是苏州科技大学的吗 lol苏州科技大学为什么这么厉害 优尔精医用降温贴是不是保健品? 我想问一下怎样不添加好友查看微信朋友圈? any.in.the.are.there.dogs.forest.连成一个疑问句 灭蚊灯与蚊香哪个效果好 灭蚊灯与蚊香哪个安全 in 和=any的区别是什么 Vf中Any查询和in查询区别在哪 灭蚊灯与蚊香哪个效果好灭蚊灯与蚊香哪个效果好些 ...听说星达人科技的李鑫老师在这方面的教学很厉害真的吗? 金域检验集团听说很大很厉害,不知道究竟如何呢? 人人讲安全个个会应急怎么下载 八十大寿菜单数好还是双数好 人人讲安全,个个会应急来自哪里 八十大寿做什么菜(八十大寿上什么菜高档) 围绕人人讲安全个个会应急,起个什么题目 崔老师你好 知道你在超声波这块厉害 我用200k超声波一体探头做纠偏传感 ... 2023安全月宣传标语 中国上古十大神兽有哪些之白泽神兽 我有一个打碟机,笔记本电脑,头戴式耳机和usb声卡我该怎么监听 用先锋1000的电脑软件打碟,用普通的电脑耳机监听会不会有什么问题?外置... Dj打碟软件如何监听?我买了一个USB51的声卡!不知道怎么弄! 打碟机监听问题! 用Are+there+any+in+the…造句单数? Is+there+anyIn+the+cup,应答语? he is as hardworking as any in the village 和 he works as hard as... QQ没有绑定手机号,人家会不会知道手机号?还有就是用这个手机号又重新申... qq是拿别人的手机注册的新号,但在我手机登录的 他从通讯录里把我添加... 用手机号申请了个QQ号,但没绑定手机号,别人会知道是我的手机号申请的... 从新申请了QQ号会不会被别人知道啊 你好,能推荐一下养马岛服务不错的渔家乐吗?谢谢! 打完大龙能马上接团吗 烟台国际机场到烟台养马岛开心渔家乐自驾过桥费多少 天穗打完大龙之后干嘛 王者打完大龙死了自己出来吗 东北人是不是有一半血型是日本人. 梦见大龙回家的预兆 中国有2站日本人的后代吗 淮南天傲辅导班在哪 淮南哪里有比较正规的暑期法语培训班? 小米智能门锁pro如何小爱语音开门 润康和伊维安2段哪个好 金边虎皮兰的扦插方法