Null return value from advice does not match primitive return type问题解决

最近突然报错“ Null return value from advice does not match primitive return type”,发现代码业务逻辑无改动,在测试环境不同的代码分支有的报错,说明这可能和自己的框架包装处理有问题。

看这个报错的话,其实说的很清楚就是,返回的NULL不匹配,一般来说就是spring aop 我们做环绕@around可能会导致的,比如说我们要打印日志,或者某些业务同步等,这些公共的部分可以提取出来的。但是问题会有两个部分:

一 是查询可能导致的
我们查到null,一般mybatis插件什么的返回值可能是基本类型int,但是int处理不了null导致直接报个does not match primitive return type。那问题就来了,首先可能你写的SQL查询就有问题,比如不能为空的你查询的是空的,甚至干脆这个SQL有问题。第二个是确实没办法,就是没有数据,那只能修改mapper里面的返回类型,把基本类型改成他的包装类。

相关问题的一个博客

这里发多提一嘴,就是之所以我们平常不会发生这个问题,其实是因为我们会有装包的一个过程,但是有的时候cglib等方式就会导致int处理不了null

二 更新操作返回导致的
实际上更新和查询不太一样,如果要int返回值,条件查找根据查询条件他一定不是null,而会是null,也就是大不了找不到,影响行数为0,所以说如果直接用mybatis的插件自带的做更新操作一般不会有什么问题。

但是我最近发现一个问题,就是测试环境更新操作,环绕操作报“类型不匹配”,实际上我把对应的update的sql执行一遍,发现没啥问题,返回值也不会有问题,那问题出在哪里?

发现是因为@Async这个异步操作注解的问题,就是我们在做更新的操作同时,又起了一个线程记录操作,但是由于不是一个线程导致,我们新启的线程拿不到返回值,也将导致update这种一般不会返回null的操作也返回null

去掉异步操作就好了,当然也可以保留异步操作,但是要注意切入的时间点,不要造成拿不到返回值,而报错类型不匹配的问题。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值