Error in render: “TypeError: Cannot read properties of undefined (reading ‘length‘)“

40 篇文章 2 订阅
27 篇文章 1 订阅
在最新的Vue项目中,尝试获取后台系统菜单时遇到length未定义的错误。问题源于后台新增的Jackson配置,该配置启用JsonInclude.Include.NON_EMPTY属性,导致空字段不被序列化。尽管返回的menuList有长度且无空字段,但这一配置过滤了某些字段,使得Vue无法正确解析长度。注释掉该配置后,问题得到解决。
摘要由CSDN通过智能技术生成

报错如下

在这里插入图片描述
在vue获取后台系统的菜单menu时,报此错,length未定义,经排查,是vue访问后台获取menu list数组的长度时引发的。

那么问题来了:后台menu菜单的length必然是>0的,但是这里未获取到就离谱。因为项目在上一个版本还是正常的。所以在跟之前版本的对比之下发现原因如下:

原因

在这里插入图片描述
后台新版本增加了jackson的配置类自定义。本来这个配置类是为了允许出现特殊字符/转义字符而设置的。其他没用,只好注释掉它了。

objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
// Include.NON_EMPTY 属性为 空("") 或者为 NULL 都不序列化,则返回的json是没有这个字段的。这样对移动端会更省流量

虽然定位到问题所在了,但是还是有疑惑:这个配置是当返回的json存在一个属性为null或者“”时,不进行序列化,并去掉这个字段。但是我后台返回给vue的菜单列表menuList是有size的,里面也没有空字段,不清楚为什么会引发配置的过滤,最终导致vue获取menu.length报错未定义。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值