spring mvc aop拦截controller层获取RequestBody反序列化后参数

最近,为了解耦,把一逻辑从interceptor抽出来,放在aop中处理,需要得到RequestBody。如下:

复制代码
@Aspect
@Configuration
public class CheckAspect {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    // 定义切点Pointcut  自行写入对应的controller包路径
    @Pointcut("execution(* com.hs.yido.controller.*.*(..))")
    public void excudeService() {
    }

    @Around("excudeService()")
    public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
        RequestAttributes ra = RequestContextHolder.getRequestAttributes();
        ServletRequestAttributes sra = (ServletRequestAttributes) ra;
        HttpServletRequest request = sra.getRequest();

        String url = request.getRequestURL().toString();
        String method = request.getMethod();
        String uri = request.getRequestURI();
        String queryString = request.getQueryString();
        //这里可以获取到get请求的参数和其他信息
        logger.info("请求开始, 各个参数, url: {}, method: {}, uri: {}, params: {}", url, method, uri, queryString);
        //重点 这里就是获取@RequestBody参数的关键  调试的情况下 可以看到o变量已经获取到了请求的参数
        Object[] o = pjp.getArgs();

        // result的值就是被拦截方法的返回值
        Object result = pjp.proceed();
        return result;
    }

}
复制代码

 

posted @   zhjh256  阅读(3812)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2016-11-20 spider RPC安全性
2016-11-20 前端mvc框架backbone.js入门
点击右上角即可分享
微信分享提示