自定义注解之数组与逗号拼接字符串自动转化
📅 2026/7/21 16:01:00
👁️ 次浏览
导言:看过前几篇自定义注解文章的同学, 应该能感受到JsonSerialize 注解的强大, 本篇将介绍另一个对应的注解JsonDeserializer的强大功能. 这俩注解可以配合着使用, 让你的代码在序列化或反序列化时, 无比的优雅.场景:回忆和前端对接口时, 经常会遇到以下这种场景 : 有一组字段我定义的数据类型是String类型如果选择了一个传单个数字如果多选了需要用逗号分隔比如1,2,3来传值。但是后来对接的时候前端那边说他那边不好处理多选的想要传数组。然而我后边的逻辑都写好了修改的话还需要自己手动一个一个的将数组转为逗号分隔的字符串。这样做是可以但是显得很不优雅。废话不多说,上代码:自定义序列化与反序列化策略类:/** * 序列化时 逗号拼接转数组 0,1,2 - [0,1,2] * * author Lynn * date 2022/11/8 14:45 */NoArgsConstructorpublicclassStringToArraySerializerextendsJsonSerializerString{Overridepublicvoidserialize(Stringstr,JsonGeneratorjsonGenerator,SerializerProviderserializerProvider)throwsIOException{if(StringUtils.isNotBlank(str)){String[]splitstr.split(,);jsonGenerator.writeArray(split,0,split.length);}else{jsonGenerator.writeArray(newString[0],0,0);}}}/** * 反序列化时 将数组转为逗号拼接 [0,1,2] - 0,1,2 * * author Lynn * date 2022/11/8 14:36 */NoArgsConstructorpublicclassArrayToStringDeserializerextendsJsonDeserializerString{OverridepublicStringdeserialize(JsonParserjsonParser,DeserializationContextdeserializationContext)throwsIOException,JsonProcessingException{TreeNodetreeNodejsonParser.getCodec().readTree(jsonParser);if(treeNodeinstanceofIntNode){return((IntNode)treeNode).asText();}elseif(treeNodeinstanceofLongNode){return((LongNode)treeNode).asText();}elseif(treeNodeinstanceofDoubleNode){return((DoubleNode)treeNode).asText();}elseif(treeNodeinstanceofArrayNode){//字符串数组会多出两个引号需要手动去除returnStringUtils.replace(StringUtils.join((ArrayNode)treeNode,,),\,);}elseif(treeNodeinstanceofTextNode){return((TextNode)treeNode).asText();}return;}}自定义数组与逗号拼接字符串自动转化注解:该注解适用于序列化/反序列化场景, 说人话就是解析前端传参以及接口返回对象时./** * 数组和逗号拼接转换注解 * * author Lynn * date 2022/11/8 14:11 */DocumentedTarget(ElementType.FIELD)Retention(RetentionPolicy.RUNTIME)JacksonAnnotationsInsideJsonSerialize(usingStringToArraySerializer.class)JsonDeserialize(usingArrayToStringDeserializer.class)publicinterfaceStringArrayConvert{}具体使用:解析入参: 无论前端传 [“0,1,2”] / “0,1,2” 都会转为 “0,1,2”/** * author Lynn * date 2022/8/30 18:35 */DataEqualsAndHashCode(callSupertrue)publicclassProductGroupAddRequestextendsDataBaseRequest{/** * app来源 */StringArrayConvertNotBlank(message展示途经不能为空)EnumValid(message展示途经输入错误,enumClassAppSourceEnum.class)privateStringappSource;}返回出参: 将 “0,1,2” 转化为 [“0,1,2”]/** * author Lynn * date 2022/8/30 16:53 */DatapublicclassProductGroupTreeResponse{/** * app来源 */StringArrayConvertprivateStringappSource;}由此场景可以推广, 但凡前端想要的数据模型和后端定义的不一致, 都可以在序列化与反序列化时, 用自定义序列化类做处理, 这样可以简化业务代码.
从普通用户到域管:Pentestly完整攻击链构建与实战案例分析 【免费下载链接】pentestly Python and Powershell internal penetration testing framework 项目地址: https://gitcode.com/gh_mirrors/pe/pentestly
在企业内网渗透测试中,如何高效利…
📅 2026/7/21 16:00:00
终极指南:3分钟在Windows上安装Dlib预编译包,告别编译噩梦 【免费下载链接】Dlib_Windows_Python3.x Dlib compiled binaries (.whl) for Python 3.7-3.14 and Windows x64 项目地址: https://gitcode.com/gh_mirrors/dl/Dlib_Windows_Python3.x
…
📅 2026/7/21 16:00:00
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【龍魂系统 电商信任重建与实证赔偿协议 v1.0】
E-Commerce Trust Rebuild & Evidence-Based Compensation Protocol
P0级别 | 永久锁定 | 不可修改 | 不可绕过
━━━━━━━━━━━…
📅 2026/7/21 16:00:00
摘要 在智慧校园数字化改造进程中,学生宿舍、公共教室、实训功能房的人员准入管控、消防安全用电、后勤运维管理,始终是高校后勤管理的重难点场景。传统机械门锁人工巡查的管理模式,存在人员权限混乱、外来人员窜访、违规用电频发、空置能耗浪…
📅 2026/7/21 21:37:42
1. AM62Px Timer模块架构概览与设计哲学在嵌入式系统开发中,定时器(Timer)的地位堪比心脏之于人体,它为整个系统提供了精准的“心跳”和“节拍”。无论是实时操作系统(RTOS)的任务调度、电机控制的PWM生成&…
📅 2026/7/21 21:37:42
Ultimate Vocal Remover v5.6深度解析:三大AI引擎如何革新音频分离体验 【免费下载链接】ultimatevocalremovergui GUI for a Vocal Remover that uses Deep Neural Networks. 项目地址: https://gitcode.com/GitHub_Trending/ul/ultimatevocalremovergui
在…
📅 2026/7/21 21:37:42
1. 项目概述:用Lasso做特征筛选,不是调个包就完事你有没有遇到过这样的情况:手头有个回归任务,原始数据有20多个特征,但模型训练出来效果平平,MAE卡在0.25上动不了;一查特征重要性,发…
📅 2026/7/21 21:37:42
1. 先搞清楚“免费”到底指什么,以及你需要准备什么看到“AutoCAD 2025免费下载安装”这个标题,很多人第一反应是去找破解版或激活工具。但作为从业者,我必须先泼一盆冷水:市面上绝大多数声称能“永久免费”使用AutoCAD的教程&…
📅 2026/7/21 21:37:42
GEO lnc 不是玄学,是实打实的流量逻辑。搞懂它,你能省下几十万冤枉钱。看不懂?那你继续等着被收割吧。说实话,刚听到 GEO lnc 这个词的时候,我整个人是懵的。那时候我正被搜索引擎优化的焦虑折磨得掉头发,每天盯着后台那点可怜的曝光量,心里火大得不行。朋友神神秘秘地跟…
📅 2026/7/21 21:36:39
本文关键词:geo geo测试你是不是也遇到过这种奇葩事?明明你的网站内容写得比同行好,图片更清晰,甚至价格还更低,但在搜索结果里就是排不进去。特别是做本地生意的老板,那种看着隔壁老王明明啥也不是,却天天坐在收银台数钱的滋味,真的憋屈。我最近为了搞懂这个所谓的“地…
📅 2026/7/21 0:00:39
1. Octane Render与C4D的黄金组合:为什么选择这个方案?在三维创作领域,渲染器的选择往往决定了作品的最终呈现质量和工作效率。作为Cinema 4D(C4D)用户,Octane Render的GPU加速特性与实时预览功能ÿ…
📅 2026/7/21 0:00:41
1. GPMC接口设计:从硬件连接到软件配置的全局视角在嵌入式系统开发中,尤其是基于TI Sitara系列如AM263x这类高性能微控制器的项目里,外部存储器的扩展几乎是绕不开的一环。无论是存放大量非易失性代码的NOR Flash,还是作为高速数据…
📅 2026/7/21 0:00:41
1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…
📅 2026/7/21 1:04:03
1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…
📅 2026/7/21 1:04:03
更多请点击:
https://intelliparadigm.com
第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…
📅 2026/7/21 1:04:03
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/21 7:04:23
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/21 17:04:52
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/21 5:04:16