码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • SpringBoot--@InitBinder--使用/原理


    原文网址:https://knife.blog.csdn.net/article/details/125528337

    简介

            本文介绍@InitBinder的用法与原理。

    使用

    见:SpringBoot--全局格式处理--方法/实例_IT利刃出鞘的博客-CSDN博客

    原理

    加了前缀为何能绑定上

    1、ModelAttributeMethodProcessor#resolveArgument里依赖attribute = createAttribute(name, parameter, binderFactory, webRequest)方法完成数据的封装、转换

    2、createAttribute先request.getParameter(attributeName)看请求域里是否有值(此处为null),若木有就反射创建一个空实例,回到resolveArgument方法。

    3、继续利用WebDataBinder来完成对这个空对象的数据值绑定,这个时候这些FieldDefaultPrefix就起作用了。执行方法是:bindRequestParameters(binder, webRequest),实际上是((WebRequestDataBinder) binder).bind(request);。对于bind方法的原理,就不陌生了~

    4、完成Model数据的封装后,再进行@Valid校验...

    总结

    1. @InitBinder标注的方法执行是多次的,一次请求来就执行一次
    2. Controller实例中的所有@InitBinder只对当前所在的Controller有效
    3. @InitBinder的value属性控制的是模型Model里的key,而不是方法名(不写代表对所有的生效)
    4. @InitBinder标注的方法不能有返回值(只能是void或者returnValue=null)
    5. @InitBinder对@RequestBody这种基于消息转换器的请求参数无效

            因为@InitBinder它用于初始化DataBinder数据绑定、类型转换等功能,而@RequestBody它的数据解析、转换时消息转换器来完成的,所以即使你自定义了属性编辑器,对它是不生效的(它的WebDataBinder只用于数据校验,不用于数据绑定和数据转换。它的数据绑定转换若是json,一般都是交给了jackson来完成的)。

            只有AbstractNamedValueMethodArgumentResolver才会调用binder.convertIfNecessary进行数据转换,从而属性编辑器才会生效

  • 相关阅读:
    ubuntu| ubuntu 20、ubuntu高版本安装低版本的gcc、gcc5
    SQL注入漏洞发现和利用,以及SQL注入的防护
    时域分析
    Ant Design Vue & Element-ui 中table 合并行功能,以及带分页并合并行
    在线教育项目【老师管理-前端实现】
    【QT开发笔记-基础篇】| 第四章 事件QEvent | 4.7 拖放事件
    贪吃蛇游戏制作
    写点什么吧,作为STM32系列的开篇……
    GJB 5000B二级-CM配置管理
    044_第三代软件开发-保存PDF
  • 原文地址:https://blog.csdn.net/feiying0canglang/article/details/125528337
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号