Spring的RequestBodyAdvice拦截浅析

 更新时间:2023年02月02日 11:14:32   作者:朝夕不待人  
本文主要介绍了Spring的RequestBodyAdvice拦截浅析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

背景

因为项目接口需要进行解密,需要对数据进行统一处理,就使用了ReuqestBodyAdvice进行数据解密处理,但是偶然的发现supports方法会出现执行两次的情况,觉得有点奇异就进行了一次断点调试,然后就发现了执行两次的原因;

过程

1.默认supports方法返回false,表示不做任何处理:

2.默认supports方法返回true,表示对数据进行处理:

如图所示无论supports方法返回true还是false,只要这个ReuqestAdvice存在并且在spring中生效,supports方法都会执行两次;

了解了前置情况接下来就是用断点进行接口调试了:
第一次跳过supports方法后的跳转:

第二次执行完supports方法之后的跳转:

如图所示,如果有经常对看源码或者眼尖的朋友应该就会方法两次执行完supports方法之后跳转的方法名是有区别的:
第一次执行后跳转: beforeBodyRead
第二次执行后跳转: afterBodyRead

结论

如上述的调测结果所示,实现RequestBodyAdvice接口之后的拦截在成功执行的时候会调用两次supports方法.
而执行两次的原因是因为需要分别对beforeBodyRead和afterBodyRead进行判断:
当第一次supports方法返回结果是true的时候表示会执行beforeBodyRead方法
当第二次supports方法返回true的时候表示会执行afterBodyRead方法.
反之亦然
PS: 一个比较容易被人忽视但是找不到解决方法的小细节:
若是Controller类上的方法参数没有加上@RequestBody标签则该RequestBodyAdvice是不会被执行的.
如果上述内容存在问题,麻烦各位留言指出会第一时间修改.

到此这篇关于Spring的RequestBodyAdvice拦截浅析的文章就介绍到这了,更多相关Spring RequestBodyAdvice拦截内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java判断字符串是否是整数或者浮点数的方法

    Java判断字符串是否是整数或者浮点数的方法

    今天小编就为大家分享一篇Java判断字符串是否是整数或者浮点数的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Spring @Transactional注解失效解决方案

    Spring @Transactional注解失效解决方案

    这篇文章主要介绍了Spring @Transactional注解失效解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • 详解Idea中HTTP Client请求测试工具的使用

    详解Idea中HTTP Client请求测试工具的使用

    今天抽空给大家分享Idea中HTTP Client请求测试工具的使用,小编在这建议使用HTTP Client的Idea版本最好在2018以上,不然的话体验不是多好,今天就给大家介绍Idea中HTTP Client怎么使用的,感兴趣的朋友跟随小编一起看看吧
    2021-05-05
  • SpringBoot集成MyBatisPlus+MySQL的实现

    SpringBoot集成MyBatisPlus+MySQL的实现

    MybatisPlus是国产的第三方插件, 它封装了许多常用的CURDapi,免去了我们写mapper.xml的重复劳动,本文主要介绍了SpringBoot集成MyBatisPlus+MySQL的实现,感兴趣的可以了解一下
    2023-10-10
  • Java SQL注入案例教程及html基础入门

    Java SQL注入案例教程及html基础入门

    这篇文章主要介绍了前端开发每天必学之SQL及HTML入门基础知识,介绍了学习web前端开发需要掌握的基础技术,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • Spring Security实现接口放通的方法详解

    Spring Security实现接口放通的方法详解

    在用Spring Security项目开发中,有时候需要放通某一个接口时,我们需要在配置中把接口地址配置上,这样做有时候显得麻烦。本文将通过一个注解的方式快速实现接口放通,感兴趣的可以了解一下
    2022-05-05
  • java简单实现多线程及线程池实例详解

    java简单实现多线程及线程池实例详解

    这篇文章主要为大家详细介绍了java简单实现多线程,及java爬虫使用线程池实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • Java之单例模式实现方案详解

    Java之单例模式实现方案详解

    这篇文章主要介绍了Java之单例模式实现方案详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 快速搭建一个SpringBoot项目(纯小白搭建教程)

    快速搭建一个SpringBoot项目(纯小白搭建教程)

    本文主要介绍了快速搭建一个SpringBoot项目,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • SpringBoot中动态数据源是实现与用途

    SpringBoot中动态数据源是实现与用途

    这篇文章主要是来和大家讨论一下SpringBoot中动态数据源是实现与用途,文中的示例代码简洁易懂,具有一定的学习价值,感兴趣的可以了解一下
    2023-08-08

最新评论