Spring boot 处理复杂json接收,同种类型、不同场景处理
场景:
- json大体格式一致,但是 ext_info 扩展字段对象,场景不同字段不同
- 根据某字段类型,不同值,对应不同实现的
Component
,处理不同场景- 这里根据
event
,来做不同处理
{"data": {"event": "eventWoMan","event_id": "123","ext_info": {"dist_sex": "女","dist_height": "162"},"target_name": "美女类型json"},"seq": 0
}{"data": {"event": "eventWoMan","event_id": "123","ext_info": {"dist_name": "小树","dist_age": "18"},"target_name": "帅哥类型json"},"seq": 0
}
接收类:
@lombok.Data
public class BusinessMsg<T> {private T data;private int seq;}
import com.fasterxml.jackson.annotation.JsonProperty;@lombok.Data
public class MsgData<T> {private String event;@JsonProperty("event_id")private String eventId;@JsonProperty("ext_info")private T extInfo;@JsonProperty("target_name")private String targetName;}
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;@Data
public class ExtInfoMan {/*** 目标姓名*/@JsonProperty("dist_name")private String distName;/*** 目标年龄*/@JsonProperty("dist_age")private String distAge;}
@Data
public class ExtInfoWoMan {/*** 目标性别*/@JsonProperty("dist_sex")private String distSex;/*** 目标高度*/@JsonProperty("dist_height")private String distHeight;}
处理service:
public interface JsonTService {/*** 预处理消息* @param businessMsg*/String handlerMsg(BusinessMsg<MsgData<JsonNode>> businessMsg);}
@Service("eventMan")
public class JsonManServiceImpl implements JsonTService {@Resourceprivate ObjectMapper objectMapper;@SneakyThrows@Overridepublic String handlerMsg(BusinessMsg<MsgData<JsonNode>> businessMsg) {JsonNode extInfo = businessMsg.getData().getExtInfo();ExtInfoMan exitInfo = objectMapper.treeToValue(extInfo, ExtInfoMan.class);return exitInfo.toString();}
}
@Service("eventWoMan")
public class JsonWoManServiceImpl implements JsonTService {@Resourceprivate ObjectMapper objectMapper;@SneakyThrows@Overridepublic String handlerMsg(BusinessMsg<MsgData<JsonNode>> businessMsg) {JsonNode extInfo = businessMsg.getData().getExtInfo();ExtInfoWoMan extInfoWoMan = objectMapper.treeToValue(extInfo, ExtInfoWoMan.class);return extInfoWoMan.toString();}
}
策略处理
import com.service.JsonTService;
import org.springframework.stereotype.Service;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;/*** @author xiaoshu*/
@Service
public class JsonStrategyContext {private final Map<String, JsonTService> orderStrategyMap = new ConcurrentHashMap<>();public JsonStrategyContext(Map<String, JsonTService> strategyMap) {this.orderStrategyMap.putAll(strategyMap);}public JsonTService getResource(String event){return orderStrategyMap.get(event);}
}
实际接口接收:
@Resourceprivate JsonStrategyContext jsonStrategyContext;@ApiOperation(value = "泛型处理,同格式json,扩展字段不一")@PostMapping("/revice")public String revice(@RequestBody BusinessMsg<MsgData<JsonNode>> businessMsg){String event = businessMsg.getData().getEvent();return jsonStrategyContext.getResource(event).handlerMsg(businessMsg);}
相关文章:
Spring boot 处理复杂json接收,同种类型、不同场景处理
场景: json大体格式一致,但是 ext_info 扩展字段对象,场景不同字段不同根据某字段类型,不同值,对应不同实现的 Component,处理不同场景这里根据 event,来做不同处理 {"data": {"event"…...
排列置换环上构造:1025T3
http://cplusoj.com/d/senior/p/SS231025C 排列构造的新知识:上置换环! 我们发现朴素做法是 n 2 n^2 n2 级别的,但数据范围希望我们是 n 2 2 \frac {n^2}2 2n2 级别的。我们发现我们暴力复制序列显得非常蠢,因为很多序列前后…...
Stable diffusion的一些参数意义及常规设置
在线stabel Diffusion模型 https://huggingface.co/spaces/stabilityai/stable-diffusion 随机种子 seed 如果想要同一个文本提示,生成多次都是同一图像,可以设置一个随机种子,类似于random.seed()的原理,并将生成器传递给管道。…...
成员变量、静态成员变量、局部变量、常量的内存区域
一、Java中没有全局变量的概念,变量分为类的成员变量、静态成员变量和方法中的局部变量 1、局部变量,基本类型的局部变量变量名和值都存放在虚拟机栈中,引用类型的局部变量变量名存放在栈中,而变量指向的对象存放在堆中。记也很好…...

网络协议--IGMP:Internet组管理协议
13.1 引言 12.4节概述了IP多播给出,并介绍了D类IP地址到以太网地址的映射方式。也简要说明了在单个物理网络中的多播过程,但当涉及多个网络并且多播数据必须通过路由器转发时,情况会复杂得多。 本章将介绍用于支持主机和路由器进行多播的In…...

网络安全https
http是明文的,相当于在网上裸奔,引出了https,大多数网站都转为了https,连非法的赌博网站有的都是https的。 1.https的网站是不是必须让用户装数字证书? 答:分两种,一种是单向认证,像…...
xcode Simulator 手动安装
xcode Simulator 手动安装 参考文档 xcode又又又升级了,升级完成之后不下载最新的 iOS 17 Simulator就不能编译运行了,只能静静的等他下载。但是离谱的是这个居然没有断点续下,每次都要重新下载,眼睁睁的看着下载了4个G然后断掉…...

Unity中国、Cocos为OpenHarmony游戏生态插上腾飞的翅膀
2023年是OpenHarmony游戏生态百花齐放的一年!为了扩展OpenHarmony游戏生态,OpenHarmony在基金会成立了游戏SIG小组,游戏SIG小组联合cocos,从cocos2dx入手一周内快速适配了cocos2.2.6的MVP版本,随后又分别适配了cocos2d…...
Monaco Editor编辑器
monaco-editor Monaco Editor 是一个基于浏览器的代码编辑器,由微软开发。它提供了丰富的功能,包括语法高亮、智能代码补全、代码折叠、多光标编辑等。Monaco Editor 是 Visual Studio Code 的核心编辑器,也被广泛用于其他开发工具和在线代码…...

ARM | 传感器必要总线IIC
IIC总线介绍 1.谈谈你对IIC总线理解? 1)IIC总线是串行半双工同步总线,主要用于连接整体电路 2)SCL/SDA作用:IIC是两线制,一根是时钟线SCK,用于控制什么时候进行进行数据传输,时钟信号由主机发出; 另一根是数据线SDA,用于进行数据传输,可以从…...

Mybatis中Resources和ClassLoaderWrapper
ClassLoaderWrapper Resources...

Linux多线程服务端编程:使用muduo C++网络库 学习笔记 第三章 多线程服务器的适用场合与常用编程模型
本文中的多线程服务器指运行在Linux上的独占式网络应用程序。硬件平台为Intel x86-64系列的多核CPU,单路或双路SMP(Symmetric Multi-Processing,对称多处理,它是一种多核处理器架构,其中多个CPU核心共享系统的内存和其…...

windows下使用FFmpeg开源库进行视频编解码完整步聚
最终解码效果: 1.UI设计 2.在控件属性窗口中输入默认值 3.复制已编译FFmpeg库到工程同级目录下 4.在工程引用FFmpeg库及头文件 5.链接指定FFmpeg库 6.使用FFmpeg库 引用头文件 extern "C" { #include "libswscale/swscale.h" #include "libavdevic…...

如何更改eclipse的JDK版本
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、有时候导入一些网上的资源需要更换JDK二、使用步骤1. 总结 一、有时候导入一些网上的资源需要更换JDK 具体操作如下 二、使用步骤 1. 在eclipse上方工具栏找…...

HarmonyOS第一课运行Hello World
前言 俗话说,工欲善其事必先利其器。鸿蒙第一课,我们先从简单的Hello World运行说起。要先运行Hello World,那么我们必须搭建HarmonyOS的开发环境。 下载与安装DevEco Studio 在HarmonyOS应用开发学习之前,需要进行一些准备工作&a…...
解决el-tooltip滚动时悬浮框相对位置发生变化
获取最外层box的class,并在内层添加el-scrollbar <template><div class"ChartsBottom"><el-scrollbar><ul class""><li v-for"(item, index) in list" :key"index"><div class"con…...

Java精品项目源码第61期汽车零件销售商城系统(代号V063)
Java精品项目源码第61期汽车零件销售商城系统(代号V063) 大家好,小辰今天给大家介绍一个汽车零件销售商城系统,演示视频公众号(小辰哥的Java)对号查询观看即可 文章目录 Java精品项目源码第61期汽车零件销售商城系统(代号V063)难…...

Python OpenCV剪裁图片并修改对应的Labelme标注文件
Python OpenCV剪裁图片并修改对应的Labelme标注文件 前言前提条件相关介绍实验环境剪裁图片并修改对应的Labelme标注文件代码实现 前言 由于本人水平有限,难免出现错漏,敬请批评改正。更多精彩内容,可点击进入Python日常小操作专栏、OpenCV-P…...

【JAVA学习笔记】44 - 注解,元注解
项目代码 一、注解的引入 1)注解(Annotation)也被称为元数据(Metadata),用于修饰解释包、类、方法、属性、构造器、局部变量等数据信息。 2)和注释一样,注解不影响程序逻辑,但注解可以被编译或运行,相当于嵌入在代码中的补充信息。 3)在Ja…...
Android 安卓Kotlin-协程
当谈到现代异步编程时,Kotlin协程(Kotlin Coroutines)是一个备受欢迎的工具。它提供了一种更具可读性和可维护性的方式来处理异步任务,而无需陷入回调地狱。本篇博客将深入探讨Kotlin协程,涵盖其基本概念、用法、特性以…...

ansible-playbook 进阶 接上一章内容
1.异常中断 做法1:强制正常 编写 nginx 的 playbook 文件 01-zuofa .yml - hosts : web remote_user : root tasks : - name : create new user user : name nginx-test system yes uid 82 shell / sbin / nologin - name : test new user shell : gete…...

[Windows] 剪映 视频编辑处理
附链接:夸克网盘分享(点击蓝色字体自行保存下载)...

YOLOv8 移动端升级:借助 GhostNetv2 主干网络,实现高效特征提取
文章目录 引言GhostNetv2概述GhostNet回顾GhostNetv2创新 YOLOv8主干网络改进原YOLOv8主干分析GhostNetv2主干替换方案整体架构设计关键模块实现 完整主干网络实现YOLOv8集成与训练模型集成训练技巧 性能对比与分析计算复杂度对比优势分析 部署优化建议结论与展望 引言 目标检…...
[SC]SystemC在CPU/GPU验证中的应用(六)
SystemC在CPU/GPU验证中的应用(六) 摘要:下面分享50个逐步升级SystemC编程能力的示例及建议的学习路线图。您可以一次一批地完成它们——从前五个基础的例子开始,然后转向channels, TLM, bus models, simple CPU/GPU kernels等等。在每个阶段掌握之后,再进行下一组…...
vue3 基本语法 父子关系
在Vue 3中,父子组件的关系是通过组件的嵌套实现的。父组件可以传递数据(props)给子组件,同时子组件可以通过事件(emits)与父组件通信。下面是如何在Vue 3中建立和使用父子组件的基本语法: 1. 创…...

(新)MQ高级-MQ的可靠性
消息到达MQ以后,如果MQ不能及时保存,也会导致消息丢失,所以MQ的可靠性也非常重要。 一、数据持久化 为了提升性能,默认情况下MQ的数据都是在内存存储的临时数据,重启后就会消失。为了保证数据的可靠性,必须…...

鸿蒙NEXT应用加固工具哪家更好?国内主流的6款对比
随着鸿蒙NEXT系统的推进,越来越多企业将目光投向鸿蒙生态下的应用部署与数据安全。尤其是在核心业务App逐步上架鸿蒙原生平台的当下,如何实现高效、可靠的鸿蒙NEXT应用安全加固,已成为企业技术选型的关键环节。本文将对市面上6款主流的鸿蒙NE…...
Android 开发 Kotlin 全局大喇叭与广播机制
在 Android 开发中,广播机制就像一个神通广大的 “消息快递员”,承担着在不同组件间传递信息的重任。Kotlin 语言的简洁优雅更使其在广播机制的应用中大放异彩。今天,就让我们一同深入探索 Android 开发中 Kotlin 全局大喇叭与广播机制的奥秘…...
mkcert实现本地https
1.下载 mkcert 从 mkcert GitHub 发布页 下载适用于 Windows 的版本(如 mkcert-v1.4.4-windows-amd64.exe)。 安装 mkcert 以管理员身份运行命令提示符(CMD),执行以下命令安装并信任本地 CAÿ…...

具有离散序列建模的统一多模态大语言模型【AnyGPT】
第1章 Instruction 在人工智能领域、多模态只语言模型的发展正迎来新的篇章。传统的大型语言模型(LLM)在理解和生成人类语言方面展现出了卓越的能力,但这些能力通常局限于 文本处理。然而,现实世界是一个本质上多模态的环境,生物体通过视觉、…...