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

免费3d模型网站青岛气象站建站时间

免费3d模型网站,青岛气象站建站时间,企业官网html源码,微信商家小程序怎么弄今天遇到一个问题#xff1a;一个典型的 Java 泛型在反序列化场景下“类型擦除 无法推断具体类型”导致的隐性 Bug#xff0c;尤其是在 RPC#xff08;如 Dubbo、Feign 等#xff09;和 本地 JVM 内直连调用共存时#xff0c;这种问题会显现得非常明显。 A 服务暴露了一…今天遇到一个问题一个典型的 Java 泛型在反序列化场景下“类型擦除 无法推断具体类型”导致的隐性 Bug尤其是在 RPC如 Dubbo、Feign 等和 本地 JVM 内直连调用共存时这种问题会显现得非常明显。 A 服务暴露了一个 RPC 接口规范如下 public class WeaResultT implements Serializable {private static final long serialVersionUID 15869325700230991L;ApiModelProperty(状态码)private int code;ApiModelProperty(提示信息)private String msg;ApiModelProperty(状态)private boolean status;ApiModelProperty(数据)private T data; } 定义的 RPC 接口如下 WeaResult selectDetail(RuleTypeSettingDto ruleTypeSettingDto);API 中的返回值没有声明泛型 T 的具体类型。然后被 B 服务调用了远程调用代码 private Integer isMultiMode(AllocationRuleDto request) {return Optional.ofNullable(ruleTypeSettingService.selectDetail(RuleTypeSettingDto.builder().moduleName(AllocationComponent.CUSTOMER_SERVICE).typeId(request.getTypeId()).tenantKey(request.getTenantKey()).typeName(cs).build())).map(WeaResult::getData).map(data -(Map?,?)data).map(dataMap - dataMap.get(sceneType)).map(Object::toString).map(Integer::valueOf).orElse(0);}接受到结果只能硬着头皮强转获取对应值。 这里解释下为什么要强转 当是 RPC 场景如 JSON 序列化传输时框架通常会把 data 转换为 MapString, Object比如 JSON 默认映射到 HashMap所以我这里直接强转成 Map 类型 map(data - (Map?,?) data)这样是能够能运行的没啥问题。 但是重点来了当是A 和 B 服务合并单体时部署时在同一个 JVM 中或者说是本地部署就会直接返回原始的具体类型对象比如是 RuleTypeSettingVo此时 (Map?, ?) data 就会抛 ClassCastException —— 因为根本不是 Map所以这个就是一个巨坑这就是没有合理定义 API 接口导致的并且泛型一定一定要注明清楚。否则调用方永远只是一个盲区。 提示这里的合并指的是将服务提供者和消费者都合并成一个单体服务部署。可能是节省客户资源。 那么怎么去正确改进呢 方法一指定泛型类型让接口明确返回结构 WeaResultRuleTypeSettingVo selectDetail(RuleTypeSettingDto ruleTypeSettingDto);这样无论是远程调用还是本地调用返回值类型一致调用方可以安全地 (Map)但是不推荐用 RuleTypeSettingVo 还是大部分都是按照实体返回。所以定义 API 规范时一定要明确所有出入参以及涉及到的泛型。 另外定义了这种 WeaResult 有 code status 返回的一定要优先判断 code status。否则你一定会吃大亏code status 可以让我们在调用远程接口时减少很多不必要的麻烦 方法二在调用方显式判断类型(不推荐) 如果你不能修改接口但调用方需要容错处理可以使用 Object data ruleTypeSettingService.selectDetail(...).getData(); Map?, ? dataMap; if (data instanceof Map) {dataMap (Map?, ?) data; } else {// 使用 BeanUtils 或反射将对象转换为 MapdataMap convertBeanToMap(data); }或者 data - JSONObject.parseObject(JSON.toJSONString(data), Map.class))你可以封装一个 convertBeanToMap(Object obj) 工具类比如用 Apache Commons BeanUtils、Spring 的 BeanWrapperImpl 或自定义反射实现。 但是这种方法不推荐这样做对调用方太不友好而且写这样的代码很不好维护。这只是一个临时解决方案 建议为 RPC 接口统一泛型类型 应该避免接口返回 WeaResult 没有明确泛型否则不同的调用方远程 vs 本地会得到结构不一致的对象严重时导致生产级兼容问题。 建议的统一写法 WeaResultMapString, Object selectDetail(RuleTypeSettingDto ruleTypeSettingDto);或者如果你能保证返回值是某个固定 VO 类 WeaResultRuleTypeSettingVo selectDetail(RuleTypeSettingDto ruleTypeSettingDto);然后在调用方处理 RuleTypeSettingVo vo result.getData(); vo.getSceneType(); // 等价于 map.get(sceneType)最后推荐大家 RPC 接口的返回值类型一旦模糊如未指定泛型不管是微服务架构体系还是合并单体公用同一个 JVM使用时都可能导致结果不一致最稳妥做法是*统一泛型类型(推荐)或封装类型转换逻辑(不推荐)。 推荐阅读文章 由 Spring 静态注入引发的一个线上T0级别事故真的以后得避坑 如何理解 HTTP 是无状态的以及它与 Cookie 和 Session 之间的联系 HTTP、HTTPS、Cookie 和 Session 之间的关系 什么是 Cookie简单介绍与使用方法 什么是 Session如何应用 使用 Spring 框架构建 MVC 应用程序初学者教程 有缺陷的 Java 代码Java 开发人员最常犯的 10 大错误 如何理解应用 Java 多线程与并发编程 把握Java泛型的艺术协变、逆变与不可变性一网打尽 Java Spring 中常用的 PostConstruct 注解使用总结 如何理解线程安全这个概念 理解 Java 桥接方法 Spring 整合嵌入式 Tomcat 容器 Tomcat 如何加载 SpringMVC 组件 “在什么情况下类需要实现 Serializable什么情况下又不需要一” “避免序列化灾难掌握实现 Serializable 的真相二” 如何自定义一个自己的 Spring Boot Starter 组件从入门到实践 解密 Redis如何通过 IO 多路复用征服高并发挑战 线程 vs 虚拟线程深入理解及区别 深度解读 JDK 8、JDK 11、JDK 17 和 JDK 21 的区别 10大程序员提升代码优雅度的必杀技瞬间让你成为团队宠儿 “打破重复代码的魔咒使用 Function 接口在 Java 8 中实现优雅重构” Java 中消除 If-else 技巧总结 线程池的核心参数配置(仅供参考) 【人工智能】聊聊Transformer深度学习的一股清流(13) Java 枚举的几个常用技巧你可以试着用用 由 Spring 静态注入引发的一个线上T0级别事故真的以后得避坑 如何理解 HTTP 是无状态的以及它与 Cookie 和 Session 之间的联系 HTTP、HTTPS、Cookie 和 Session 之间的关系 使用 Spring 框架构建 MVC 应用程序初学者教程 有缺陷的 Java 代码Java 开发人员最常犯的 10 大错误 Java Spring 中常用的 PostConstruct 注解使用总结 线程 vs 虚拟线程深入理解及区别 深度解读 JDK 8、JDK 11、JDK 17 和 JDK 21 的区别 10大程序员提升代码优雅度的必杀技瞬间让你成为团队宠儿 探索 Lombok 的 Builder 和 SuperBuilder避坑指南一 为什么用了 Builder 反而报错深入理解 Lombok 的“暗坑”与解决方案二
http://www.w-s-a.com/news/212340/

相关文章:

  • 做性的网站有哪些苏州专业网站设计制作公司
  • 陵水网站建设友创科技十大优品店排名
  • 想换掉做网站的公司简要说明网站制作的基本步骤
  • 国企公司网站制作wordpress 浮动定位
  • 网站网页直播怎么做的企业网站建设推荐兴田德润
  • 网站建设熊猫建站厦门seo全网营销
  • 扁平网站设计seo是什么岗位的缩写
  • 工商企业网站群晖配置wordpress 80端口
  • 企业网站建设流程步骤镇江东翔网络科技有限公司
  • 网络工程师和做网站哪个难网络建站如何建成
  • 网站建设需要哪些项目游民星空是用什么做的网站
  • 旅游网站建设要如何做百度商城网站建设
  • destoon 网站搬家中国企业500强都有哪些企业
  • 商城网站前端更新商品天天做吗哈尔滨做网站优化
  • 新乡网站开发wordpress 产品分类侧边栏
  • 网站自己做自己的品牌好做互联网企业分类
  • 项目网站建设方案石家庄网站快速排名
  • 网站开发大作业报告做电商网站的参考书
  • Apache局域网网站制作wordpress外链自动保存
  • 网站备案号要怎么查询千锋教育培训机构地址
  • 门户网站建设要求几款免费流程图制作软件
  • 花生壳域名可以做网站域名吗wordpress内链工具
  • 猎头公司网站模板网站伪静态作用
  • 工程建设教育网站html成品网页模板下载
  • 同一ip 网站 权重wordpress 菜单 小图标
  • 网站没有icp备案wordpress d8主题 4.1
  • 手机网站建设推荐企业宣传页模板
  • 杭州市富阳区建设局网站动态域名做网站
  • 网站如何免费做SEO优化靖安县城乡规划建设局网站
  • 室内设计网站平台学新媒体运营最好的培训学校