java - 为什么每个请求都会调用@InitBinder 方法?

标签 java spring spring-boot data-binding spring-mvc-initbinders

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

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

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

最佳答案

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

假设您的 REST Controller 使用 @InitBinder 注释,在该 Controller 内处理的每个请求都将实例化 Initbinder,而 WebDatabinder 会将请求参数绑定(bind)到 JavaBean 对象。

它提供了分配我们的 validator 类的方法。使用 addValidators()setValidator() 方法,我们可以分配 validator 实例。

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

引用:What is the purpose of init binder in spring MVC

关于java - 为什么每个请求都会调用@InitBinder 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51568980/

相关文章:

java - 当我的spark作业出现内存不足错误时应该如何调试?

Java:拆箱整数时出现空指针异常?

java - TextWatcher 在启动后关闭我的应用程序

java - 在java-mail中图像被转换为​​.bin文件

html - 当我使用 Thymeleaf 运行我的 Spring Boot 元素时,浏览器不会加载 css 文件,而是加载 href 和 th :href is correct 的路径

Java Spring Boot - 用于在后台运行的异步数据库操作的 CommandLineRunner

spring - 如何在不同的 Spring 上下文之间共享 Spring bean?

spring - 为什么我的 RestTemplate ClientHttpRequestInterceptor 没有被调用?

java - 仅从表中选择某些列

java - 如何向 spring kafka 消息添加自定义 header 值?