java - 为什么每个请求都调用@InitBinder 方法?
问题描述
在调试 Spring Boot 应用程序时,我注意到@InitBinder
每个传入请求都会调用带有注释的方法。
@InitBinder("categories")
public void bindFields(WebDataBinder binder) {
binder.registerCustomEditor(Set.class, new CustomPropertyEditor());
}
在@InitBinder
方法中,我们将 a 设置PropertyEditor
为活页夹。我不明白为什么要一次又一次地调用这些方法并设置相同的东西?Spring 是否为每个请求
创建一个新对象?WebDataBinder
解决方案
@InitBinder
起到识别用于初始化的方法的作用WebDataBinder
。Initbinder 通常用于将 requestParams 绑定到自定义对象。
假设您的 REST 控制器使用 注释@InitBinder
,在该控制器中处理的每个请求都将实例化 Initbinder 并将WebDatabinder
请求参数绑定到 JavaBean 对象。
它提供了分配我们的验证器类的方法。使用addValidators()
andsetValidator()
方法,我们可以分配我们的验证器实例。
用例:假设 Sun,1 月 20 日在请求参数中,并且您希望LocalDate
每次都从请求参数中解析一个对象。您可以在其中添加该解析器逻辑,WebDatabinder
并在每次发出请求时验证/解析该日期。
推荐阅读
- c++ - 为什么需要在c++运算符重载中删除内存并分配新内存
- docker - 如何在 Docker Vault 容器中创建机密
- .net - 如何使用 msbuild 或 Roslyn 仅在给定项目中构建源代码?
- xamarin.forms - 在 listView 模板中更改 BindingContext 不指向 Viewmodel
- python - 需要在 Asyncio Loop 中运行 Playwright Sync API
- scheme - 考虑应用函数的简单方法
- java - 运行 fat jar vs sbt run
- arrays - mongodb如何只找到数组的一部分
- html - AEM富文本源编辑器锚标记剥离href形成如Sightly标记
- python - 根据输入(或自动输入)提取另一个值