当前位置: 首页 > news >正文

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);}
http://www.lryc.cn/news/205938.html

相关文章:

  • 排列置换环上构造:1025T3
  • Stable diffusion的一些参数意义及常规设置
  • 成员变量、静态成员变量、局部变量、常量的内存区域
  • 网络协议--IGMP:Internet组管理协议
  • 网络安全https
  • xcode Simulator 手动安装
  • Unity中国、Cocos为OpenHarmony游戏生态插上腾飞的翅膀
  • Monaco Editor编辑器
  • ARM | 传感器必要总线IIC
  • Mybatis中Resources和ClassLoaderWrapper
  • Linux多线程服务端编程:使用muduo C++网络库 学习笔记 第三章 多线程服务器的适用场合与常用编程模型
  • windows下使用FFmpeg开源库进行视频编解码完整步聚
  • 如何更改eclipse的JDK版本
  • HarmonyOS第一课运行Hello World
  • 解决el-tooltip滚动时悬浮框相对位置发生变化
  • Java精品项目源码第61期汽车零件销售商城系统(代号V063)
  • Python OpenCV剪裁图片并修改对应的Labelme标注文件
  • 【JAVA学习笔记】44 - 注解,元注解
  • Android 安卓Kotlin-协程
  • SSO 系统设计_token 生成
  • 电表安数大小和省电有关吗?
  • 树上形态改变统计贡献:1025T4
  • 如何处理与智能床相关的医疗建议和医疗器械证明?
  • 云原生之深入解析如何合并多个kubeconfig文件
  • Netty实战-实现自己的通讯框架
  • S4.2.4.3 Electrical Idle Sequence(EIOS)
  • MySQL的优化利器:索引条件下推,千万数据下性能提升273%
  • 回归预测 | MATLAB实现BO-BiLSTM贝叶斯优化双向长短期神经网络多输入单输出回归预测
  • SOCKS5代理在全球电商、游戏及网络爬虫领域的技术创新
  • Flutter extended_image库设置内存缓存区大小与缓存图片数