码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • controlleradvice和handlerinterceptor


    这里写自定义目录标题

      • 介绍
      • @InitBinder和preHandle
      • 使用场景

    介绍

    controlleradvice和handlerinterceptor都是Spring框架中的组件,其首次出现的Spring版本如下:

    1. @ControllerAdvice

    @ControllerAdvice注解是在Spring 3.2 中作为@ExceptionHandler、@InitBinder 和@ModelAttribute的组合形式引入的,用来定义@ExceptionHandler、@InitBinder、@ModelAttribute修饰的方法适用于全局,这些方法会作用在所有的@RequestMapping注解的方法上。

    1. HandlerInterceptor

    HandlerInterceptor接口是在Spring 3.0 中引入的,它可以实现类似Servlet的Filter过滤器功能,可以在请求处理的前后添加拦截器对请求进行预处理和后处理。

    主要方法有:

    • preHandle: 在请求处理之前调用
    • postHandle: 在请求处理之后调用
    • afterCompletion: 在整个请求结束之后调用

    通过实现HandlerInterceptor接口,然后注册拦截器至Spring的HandlerMapping中,这样这个拦截器就会生效。

    所以综上:

    • @ControllerAdvice 是Spring 3.2新增
    • HandlerInterceptor 是Spring 3.0新增

    它们都可以实现一些全局的、跨切面请求处理的功能,如异常处理、参数校验等,但设计思想和使用场景有所不同。@ControllerAdvice更侧重异常处理,而HandlerInterceptor更灵活,可以在请求处理过程的多个点进行拦截。

    @InitBinder和preHandle

    @ControllerAdvice中的@InitBinder方法可以达到和HandlerInterceptor的preHandle方法类似的效果。

    @InitBinder用来初始化WebDataBinder,用于请求参数绑定到模型对象。@InitBinder标注的方法会应用到所有@RequestMapping注解的方法上。

    而HandlerInterceptor的preHandle方法也是在@RequestMapping方法执行之前执行的,所以通过@InitBinder可以在请求处理方法执行前,提前完成一些初始化操作,例如:

    1. 将请求参数转换成模型对象

    2. 参数验证

    3. 初始化一些共用的对象到请求域中

    4. 预处理请求参数

    这样就避免了在每个控制器方法中重复书写这些初始化逻辑。

    但是@InitBinder只能在请求处理前初始化,而不能在请求处理后执行。如果需要在请求处理后执行逻辑,还需要用到HandlerInterceptor的postHandle方法。

    所以两者可以很好地配合使用:

    • @InitBinder负责请求预处理
    • HandlerInterceptor的preHandle和postHandle负责拦截前后处理

    通过他们的配合可以完成参数绑定、验证、预处理以及拦截前后处理等功能。

    使用场景

    我们的接口在header中传了用户id,所以想要统一处理一下,获取到这个信息给后面的各层使用,一开始使用的handlerintercepter,后来发现controlleradvice更好用,还能顺手把异常也处理了。

  • 相关阅读:
    使用 PyTorch 的计算机视觉简介 (5/6)
    Flutter学习9 - http 中 get/post 请求示例
    PMP备考大全:经典题库(敏捷管理第4期)
    人工智能/虚拟现实技术的工程伦理分析:以电影《头号玩家》为例
    Unity把UGUI再World模式下显示到相机最前方
    程序员想要网上接单却不知道如何是好?那这篇文章你可得收藏好了!
    零代码工具拖拽流程图
    LeetCode讲解篇之113. 路径总和 II
    【C++】函数重载 ① ( 函数重载概念 | 函数重载判断标准 - 参数个数 / 类型 / 顺序 | 返回值不是函数重载判定标准 )
    PPT文件不能编辑可以这样解决
  • 原文地址:https://blog.csdn.net/u013036688/article/details/133977181
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号