spring mvc 为所有控制器提供一个初始化绑定器

2024-03-20

我有 5 个控制器,我想注册一个InitBinder对他们所有人。

我知道我可以将此代码添加到每个代码中。

@InitBinder
public void initBinder(WebDataBinder binder)
{
    binder.registerCustomEditor(StringWrapper.class, new StringWrapperEditor());
}

But我只想定义它once(甚至创建一个 beanStringWrapperEditor并使用它而不是每次都创建新的。)

我搜索了SO和其他一些地方,但没有找到任何答案。 有可能吗?

我使用 spring 3.1.1 和 java 1.6。


虽然最初的问题是关于 Spring 3.1 的,但以下内容可能对那些使用较新 Spring 版本的人有用。

例如,一种可能的选择是将 @InitBinder 移动到 @ControllerAdvice

@ControllerAdvice
class InitBinderControllerAdvice {
    @InitBinder
    fun initBinder(dataBinder: WebDataBinder) {
        dataBinder.registerCustomEditor(
            MLQueryOutputFormat::class.java,
            StringToMLQueryOutputFormat()
        )
        dataBinder.registerCustomEditor(
            IDatabaseOps.SortDirection::class.java,
            StringToSortDirection()
        )
    }
}

关于可配置的WebBinding初始化器,尽管它非常强大,但它需要在验证等方面进行额外的配置。所以实施后要注意细节。例如,以下代码按照 InitBinder 执行该工作,但缺少设置 Validator。因此,用 @Validated 注释的其余控制器参数的验证不起作用:

@Configuration
class WebMvcConfig {
    @Bean
    fun configurableWebBindingInitializer(): ConfigurableWebBindingInitializer {
        val initializer = ConfigurableWebBindingInitializer()
        initializer.propertyEditorRegistrars = arrayOf(
            PropertyEditorRegistrar {
                it.registerCustomEditor(
                    MLQueryOutputFormat::class.java,
                    StringToMLQueryOutputFormat()
                )
            }, PropertyEditorRegistrar {
                it.registerCustomEditor(
                    IDatabaseOps.SortDirection::class.java,
                    StringToSortDirection()
                )
            }
        )
        return initializer
    }
}

要添加验证,可以执行以下操作:

@Bean
fun configurableWebBindingInitializer(
    @Qualifier("defaultValidator") validator: Validator
): ConfigurableWebBindingInitializer {
    val initializer = ConfigurableWebBindingInitializer()
    initializer.validator = validator
    ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

spring mvc 为所有控制器提供一个初始化绑定器 的相关文章

随机推荐

  • 如何将本地MYSQL数据库移动到远程数据库服务器

    我有一个在 WAMP 下运行的本地 MYSQL 数据库 我需要将其移至生产数据库服务器 MySQL 新手 需要了解提升此数据库的最佳方法 您可以在当前服务器上运行它 mysqldump u user p database name gt d
  • R:如何将我的数据格式化为多项式 Logit?

    我正在 R 上复制一些 Stata 代码 我想使用以下命令执行多项式逻辑回归 mlogit函数 来自同名包 我知道有一个multinom函数于nnet但我不想用这个 我的问题是 使用mlogit 我需要使用以下方式格式化我的数据mlogit
  • 如何在 iOS 应用程序中获取某个位置的时区? [复制]

    这个问题在这里已经有答案了 我是 iOS 开发新手 我正在尝试构建一个主要可以做两件事的应用程序 a 获取用户的系统时间 比如说 他的手机在伦敦 所以他的时间 b 获取给定地点的时间 例如 旧金山 然后 我想计算两个地点之间的时间差 例如
  • PHP 中基于开关的 URL 路由

    我目前正在做的是这样的 我有一个 path变量 即后面的所有内容索引 php 我用 htaccess 隐藏 直到问号以忽略查询字符串 然后我用一个switch with preg match该变量的情况下确定它应该调用什么脚本 例如 swi
  • 如何去除 CMake 变量中的尾随空格?

    我们正在尝试改进 CMake 生成的 makefile 对于 Clang GCC 和 ICC 我们要添加 march native 这样做的块看起来像 march native for GCC Clang and ICC on i386 i
  • Slick Grid 中的数据更新

    我有一个 slickgrid 大约有 100 行 它的数据在 5 秒内刷新 但每次更新时滚动都会重置 这令人不安 我尝试使用 dataview 和 dataview refresh 但这次没有任何变化反映到网格 这是我在每次刷新时尝试的内容
  • 使用 pandas 加载大 CSV 文件

    我正在尝试使用 pandas 加载 csv 文件 大约 250 MB 作为数据框 在我的第一次尝试中 我使用了典型的 read csv 命令 但收到错误内存 我已经尝试过中提到的方法pandas 中的大型持久 DataFrame https
  • Laravel 模型:模型属性在哪里?

    我来自 Visual Studio Entity Framework 背景 并尝试在 Laravel Eloquent 中找到等效功能 在 EF 和 Visual Studio 中 我们向应用程序添加一个新模型 并只告诉它我们现有的数据库
  • 如何更改使用 Flutter 构建的应用程序显示名称?

    我已经使用 Flutter create testapp 创建了该应用程序 现在 我想将应用程序名称从 testapp 更改为 My Trips Tracker 我怎样才能做到这一点 我尝试过从AndroidManifest xml 并且它
  • 基于Enum的Jackson多态反序列化

    我正在与Jackson 多态反序列化 https github com FasterXML jackson docs wiki JacksonPolymorphicDeserialization 这是我的代码 它反序列化为基于 type 属
  • 使用 JavaScript/onorientationchange 重置 iPhone 上 Safari 的比例/宽度/缩放

    我根据用户使用 body 标签中的 onorientationchange 调用握持手机的方式显示不同的内容 这非常有效 我隐藏一个 div 同时使另一个 div 可见 纵向模式下的 div 在首次加载时看起来很棒 我用它来获得正确的比例
  • 如何从文本中删除除文字和表情符号之外的所有内容?

    作为文本分类问题的一部分 我正在尝试清理文本数据集 到目前为止 我删除了除文本之外的所有内容 标点符号 数字 表情符号 一切都被删除了 现在我尝试使用表情符号作为特征 因此我想保留单词和表情符号 首先 我在文本中搜索表情符号 并将它们与其他
  • API Key 和 JWT Token 可以在同一个 .Net 6 WebAPI 中使用吗

    我正在构建一个新的 Net 6 WebAPI 它将被许多应用程序使用 因此我需要实现 API 密钥来限制仅对这些应用程序的访问 只有极少数个人用户需要授权 管理员 因此我想与 JWT 结合用于管理端点 我们不希望要求用户在不必要的情况下 非
  • mysql批量插入文本文件

    我有纯文本文件 我想将该文本文件的内容逐行移动到 mysql 表中 任何人都可以帮助我 因为它不是 csv 文件 我怎样才能实现这一目标 我设计我的数据库如下 RowID int 11 NO PRI auto increment Text
  • 如何获取 Symfony2 中控制器的所有路由列表?

    我有一个控制器 它实现了所有路线 URL 我的想法是为所有帮助页面提供通用索引 有没有办法获取控制器 从控制器内 定义的所有路由Symfony2 您可以做的是将 cmd 与 最高 SF2 6 一起使用 php app console rou
  • Python在3D散点图中用线连接相邻点

    我有两组 x y z 坐标 我用 Matplotlib 将它们绘制在 3D 散点图中 现在 我想将每个生成的四边形与平面连接起来 我已经了解了如何在 3D 空间中绘制 2D 多边形在 python matplotlib 中绘制 3D 多边形
  • NLog - 将 NULL 写入可选数据库列

    我在用NLog http nlog project org用于登录 ASP Net 应用程序并通过 Microsoft Sql Server 使用数据库目标 我有一些可选的日志记录参数 但并不总是指定 但是 我希望在未提供这些内容时将其写为
  • 在 SwiftUI macOS 的帮助菜单下添加应用程序帮助

    如果您打开任何应用程序 它的顶部都有菜单栏项目 最后一个是帮助 当我现在运行适用于 macOS 的 SwiftUI 应用程序并按菜单上的帮助 然后按 应用程序名称 帮助 时 它只是说 帮助不适用于 应用程序名称 我如何添加对此的支持 在找到
  • Admob 如何确定文本上下文来显示有针对性的广告?

    1 Admob SDK是否能够检索应用程序中显示的所有文本字符串并根据这些文本字符串显示有针对性的广告 2 我是否必须手动指定字符串AdRequest setKeywords keywords EDIT setKeywords被忽略 Sou
  • spring mvc 为所有控制器提供一个初始化绑定器

    我有 5 个控制器 我想注册一个InitBinder对他们所有人 我知道我可以将此代码添加到每个代码中 InitBinder public void initBinder WebDataBinder binder binder regist