首页 > 解决方案 > 为什么每个请求都调用@InitBinder 方法?

问题描述

在调试 Spring Boot 应用程序时,我注意到@InitBinder每个传入请求都会调用带有注释的方法。

@InitBinder("categories")
public void bindFields(WebDataBinder binder) {
    binder.registerCustomEditor(Set.class, new CustomPropertyEditor());
}

@InitBinder方法中,我们将 a 设置PropertyEditor为活页夹。我不明白为什么要一次又一次地调用这些方法并设置相同的东西?Spring 是否为每个请求
创建一个新对象?WebDataBinder

标签: javaspringspring-bootdata-bindingspring-mvc-initbinders

解决方案


@InitBinder起到识别用于初始化的方法的作用WebDataBinder。Initbinder 通常用于将 requestParams 绑定到自定义对象。

假设您的 REST 控制器使用 注释@InitBinder,在该控制器中处理的每个请求都将实例化 Initbinder 并将WebDatabinder请求参数绑定到 JavaBean 对象。

它提供了分配我们的验证器类的方法。使用addValidators()andsetValidator()方法,我们可以分配我们的验证器实例。

用例:假设 Sun,1 月 20 日在请求参数中,并且您希望LocalDate每次都从请求参数中解析一个对象。您可以在其中添加该解析器逻辑,WebDatabinder并在每次发出请求时验证/解析该日期。

参考:spring MVC中init binder的作用是什么


推荐阅读