HandlerMethodReturnValueHandler处理返回值问题,aop

本文探讨在尝试使用HandlerMethodReturnValueHandler处理返回值时遇到的问题,由于Controller方法注解了@ResponseBody,导致RequestResponseBodyMethodProcessor优先处理。因此,无法通过自定义的Handler实现预期的MessageSource功能。为解决此问题,作者转向使用AOP,通过拦截返回值类型为Result的方法,实现了所需的结果。
摘要由CSDN通过智能技术生成

本来想通过实现HandlerMethodReturnValueHandler接口,对返回值进行处理。(实现了MessageSource,想通过code来获取Message中的值)但是呢,死活成功不了。本以为Bean没有加载,但是看了一下日志,Bean都有了。

debug了一下源码:发现之所以处理不了是因为被抢了,在selectHandler方法中,选取了RequestResponseBodyMethodProcessor作为返回值的处理方法(因为我的controller方法注解了@ResponseBody)。
这里写图片描述

我自己写的Handler是ResultReturnHandler,在List的14地址下,所以selectHandler按顺序先选取了RequestResponseBodyMethodProcessor。
这里写图片描述

所以本来的目的通过code来获取Message不太好通过HandlerMethodReturnValueHandler实现了


只好写一个aspect了
通过对返回值类型为Result的拦截,实现需要的结果

@Around("execution(tech.yiyehu.framework.
AOP(面向切面编程)中,around(环绕)通知是一种类型的通知,可以在被切入的方法执行前后进行拦截和干预。around通知可以控制目标方法的执行流程,并且还能修改返回值。 在around通知执行过程中,我们可以通过拦截目标方法执行前的位置,来获取目标方法的返回值。如果我们想要修改目标方法的返回值,可以通过在around通知中手动设置一个新的返回值,这个新的返回值会替代目标方法原本的返回值。 around通知的返回值类型一般与目标方法的返回值类型一致,或者是它的子类型,以确保返回值的类型安全性。返回值的作用取决于具体的业务场景和需求,例如,我们可以根据某些条件动态确定返回值,或者通过额外的处理逻辑为目标方法返回一个特定的值。 然而要注意,在around通知中修改返回值可能会对程序的正常执行造成一些影响。如果我们不小心修改了目标方法的返回值类型,可能会导致类型不匹配的错误。另外,如果我们没有正确处理异常情况,可能会导致无法预料的运行时异常。因此,在修改返回值时要谨慎操作,保证对目标方法返回值处理不会引发其他问题。 综上所述,around通知可以在目标方法执行前后拦截和干预,通过修改返回值,可以对目标方法的执行结果进行定制化处理。但是要注意,修改返回值时需要保证类型的匹配和异常的正确处理,以确保程序的正常执行。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值