|
对于最新的稳定版本,请使用 Spring Framework 7.0.6! |
DataBinder
@Controller 或 @ControllerAdvice 个类可以有 @InitBinder 个方法,用于
初始化 WebDataBinder 的实例。这些实例反过来被用来:
-
将请求参数(即表单数据或查询)绑定到模型对象。
-
将
String-索引的请求值(例如请求参数、路径变量、 头信息、cookie 和其他)转换为目标类型的控制器方法参数。 -
Format model object values as
Stringvalues when rendering HTML forms.
@InitBinder 方法可以注册控制器特定的 java.beans.PropertyEditor 或
Spring Converter 和 Formatter 组件。此外,您可以使用
WebFlux Java 配置 在全局共享的 FormattingConversionService 中注册 Converter 和
Formatter 类型。
@InitBinder 方法支持许多与 @RequestMapping 方法相同的参数,但不包括 @ModelAttribute(命令对象)参数。通常,它们声明为带有 WebDataBinder 参数,用于注册,并返回 void 值。以下示例使用了 @InitBinder 注解:
-
Java
-
Kotlin
@Controller
public class FormController {
@InitBinder (1)
public void initBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
dateFormat.setLenient(false);
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
}
// ...
}
| 1 | 使用 @InitBinder 注解。 |
@Controller
class FormController {
@InitBinder (1)
fun initBinder(binder: WebDataBinder) {
val dateFormat = SimpleDateFormat("yyyy-MM-dd")
dateFormat.isLenient = false
binder.registerCustomEditor(Date::class.java, CustomDateEditor(dateFormat, false))
}
// ...
}
| 1 | 使用 @InitBinder 注解。 |
或者,当通过共享的FormattingConversionService使用基于Formatter的设置时,您可以重用相同的方法并注册控制器特定的Formatter实例,如下例所示:
-
Java
-
Kotlin
@Controller
public class FormController {
@InitBinder
protected void initBinder(WebDataBinder binder) {
binder.addCustomFormatter(new DateFormatter("yyyy-MM-dd")); (1)
}
// ...
}
| 1 | 添加自定义格式化器(在这种情况下为 DateFormatter)。 |
@Controller
class FormController {
@InitBinder
fun initBinder(binder: WebDataBinder) {
binder.addCustomFormatter(DateFormatter("yyyy-MM-dd")) (1)
}
// ...
}
| 1 | 添加自定义格式化器(在这种情况下为 DateFormatter)。 |