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

网站优化推广方案西安最新消息今天

网站优化推广方案,西安最新消息今天,推广普通话的作文,塑料公司网站建设方案Lombok版本变化导致的反序列化异常 背景 因为安全性的考虑,最近在梳理旧系统的系统依赖。改动依赖时候还好,毕竟只是换掉不再合作公司的旧依赖,没敢动别的太多东西。不过没多久,测试团队就找来了… 排查问题之第一次跑偏 旧系…

Lombok版本变化导致的反序列化异常

背景

因为安全性的考虑,最近在梳理旧系统的系统依赖。改动依赖时候还好,毕竟只是换掉不再合作公司的旧依赖,没敢动别的太多东西。不过没多久,测试团队就找来了…

排查问题之第一次跑偏

旧系统有一些这样的接口(下图,),全部提示异常…
在这里插入图片描述
看了下日志,入参对象为空…

2024-12-10 10:11:52,679 [http-nio-9011-exec-3] INFO  [xxx.PreservationController:2238] [trace=d900fbccc0932d79] - PolicyReinstatementReqVO(com.xxx.web.vo.endorse.PolicyReinstatementReqVO@17ad, ContNo=null, OrderNo=null)

入参对象如下(注意,都是首字母大写的)

@Data
@NoArgsConstructor
@AllArgsConstructor 
public class PolicyReinstatementReqVO implements Serializable {private static final long serialVersionUID = 6056472621794316031L;private String ContNo;private String OrderNo;
}

第一反应就是反序列化出问题了,于是乎,开始查这旧系统的序列化方式。查到了如下配置:

    @Beanpublic HttpMessageConverter responseBodyConverter() {MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();List<MediaType> mediaTypeList = new ArrayList<>();mediaTypeList.add(MediaType.APPLICATION_JSON);mediaTypeList.add(MediaType.TEXT_HTML);jackson2HttpMessageConverter.setSupportedMediaTypes(mediaTypeList);return jackson2HttpMessageConverter;}

嗯。。用的Jackson(默认大小写敏感的),那就简单了。。改成如下代码

  @Beanpublic HttpMessageConverter responseBodyConverter() {MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter(new JacksonMapper());List<MediaType> mediaTypeList = new ArrayList<>();mediaTypeList.add(MediaType.APPLICATION_JSON);mediaTypeList.add(MediaType.TEXT_HTML);jackson2HttpMessageConverter.setSupportedMediaTypes(mediaTypeList);return jackson2HttpMessageConverter;}
// 代码有删减    
class JacksonMapper extends ObjectMapper {public JacksonMapper() {this.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);}
}

测了下,嗯,问题解决…我果然是个天才~

不过想了下,不对劲

  1. 我就是改了包依赖…没改代码啊…
  2. 我这么改看似这个问题解决了…但这种改动在这旧系统会不会引发新问题我也不确定…
  3. 这旧系统之前是怎么在这看似不合理的情况下正常运行的呢?

所以这么改大概率对但不合适,所以先回滚改动吧…

换个思路排查

  1. 目前能定位的问题是反序列化时出了问题
  2. 我的改动就是改了依赖包

综上所属,应该是我改了包依赖之后,导致的问题,而我改依赖包可能导致两个变化。

变化一

删除的三方依赖包有处理序列化的逻辑,我拿咖啡baby看了下源码,完全没有…这里的疑虑排除!

变化二

那就是这里了,错不了,依赖的版本变化导致反序列化出现问题了。

排查问题之第二次跑偏

既然是版本问题,那就查查跟序列化有关的包版本变化有什么变化吧。
旧系统有 jackson、gson、fastjson…
查了老久了,不展开说了(后续的反思也在这里),最后定位跟这些没关系。

Lombok

抓耳挠腮,苦思冥想…没有结果,周会到点了,先开周会去吧…

周会结束重新梳理了下思路:

  1. 修改依赖导致依赖版本出现了变化
  2. 依赖版本导致反序列化获取不到属性
  3. 序列化工具,jackson、fastjson、gson都没问题

那问题是什么呢?抛开序列化工具,无论什么序列化工具都是要回归到对象本身的 getter、setter和 Constructor 的。而我们的这些是通过 Lombok 注解实现的,巧的是,Lombok 的版本也升级了…
先看下前后两个版本的变化吧

// 两个版本的getter、setter是没区别的,但是Constructor有!!!
///新版本:1.18.16public PolicyReinstatementReqVO(final String ContNo, final String OrderNo) {this.ContNo = ContNo;this.OrderNo = OrderNo;}
// 旧版本:1.16.18@ConstructorProperties({"ContNo", "OrderNo"})public PolicyReinstatementReqVO(final String ContNo, final String OrderNo) {this.ContNo = ContNo;this.OrderNo = OrderNo;}

旧版本多了个 @ConstructorProperties,说实话我最开始不知道这个注解是做什么用的…惭愧。于是我先把 Lombok 的版本回退到1.16.18,重新 Run 一下。
ok,问题完美解决。

@ConstructorProperties
  1. ConstructorProperties 注解是 Java 标准库的一部分。它用于在 Java 的构造函数上,以确保在序列化和反序列化时,构造函数的参数名称和顺序与 JSON 对象中的属性名称和顺序相匹配。并且 @ConstructorProperties 注解的值必须与构造函数参数的顺序相匹配。
  2. Jackson 库支持 ConstructorProperties 注解。但如果构造函数参数使用了 @JsonProperty 注解,那么 @ConstructorProperties 注解的值可以省略,因为 Jackson 可以直接从 @JsonProperty 注解中获取参数名称。
  3. 通过使用 @ConstructorProperties 注解,你可以确保 Jackson 在序列化和反序列化时能够正确地处理构造函数参数,从而避免因参数名称不匹配而导致的错误。

反思

好的点 这次处理问题的思路挺好,没有使用自己丰富的想象力天马行空一同胡思乱想,而是一直专注在:(1)问题是什么,(2)是什么变化导致这个问题,这两个点上。
不好的点 处理旧系统之前,虽然没那么多时间完全了解旧系统,但既然要删除三方不安全的依赖,就该提前排查和记录现有的依赖都是什么版本,方便后续的问题追踪。
后续 再研究研究 Spring 以及 Jackson 序列化和反序列化流程吧。这块感觉自己比较熟,但处理问题时又没有那么熟。

http://www.ds6.com.cn/news/14550.html

相关文章:

  • 申请域网站百度竞价开户3000
  • 邯郸做移动网站价格表深圳做推广哪家比较好
  • 外贸网站建设注意线上推广方式
  • 高权重网站 内页做跳转给新网站网络营销的特点
  • 公司品牌网站建设价格定制企业网站建设制作
  • 如何判断网站程序使用asp还是php西安seo代理
  • 网站搭建网站设置seo自动优化软件
  • 专门做毕业设计的网站百度推广关键词和创意
  • 网站开发 合同范本国内十大搜索引擎
  • 传奇新开服网站拉新平台哪个好佣金高
  • 门户网站阳光警务执法办案查询杭州seo博客有哪些
  • 网页设计报价模板洛阳网站建设优化
  • 免费wap自助建站网站网站功能优化
  • 做外贸独立网站怎么样营销策划案例
  • 宁波哪里可以做网站站长之家ip地址查询
  • 洛阳 网站建设刚刚发生 北京严重发生
  • wordpress做资源下载站网站自助搭建
  • 电商网站怎么做与众不同汽车网站建设
  • 网站建设logo图片seo网站内部优化方案
  • 邯郸网站建设品牌公司佛山全市核酸检测
  • 网站开发员工资公司网站设计要多少钱
  • 寮步镇网站建设百度营销中心
  • 长沙哪里学网站建设青岛网络优化费用
  • 最便宜的购物平台旺道优化软件
  • 国内免费制作网页的网站郑州seo顾问热狗hotdoger
  • 网站 java php色盲能治好吗
  • 游戏服务端源码seo外包公司
  • Python做网站 性能在线网站分析工具
  • 政协网站建设方案个人网站的制作
  • 商城网站开发多少钱搜索引擎免费登录入口