对于最新稳定版本,请使用 Spring Framework 7.0.6spring-doc.cadn.net.cn

DataBinder

@Controller@ControllerAdvice 类可以包含 @InitBinder 方法,用于初始化 WebDataBinder 的实例。这些实例随后被用于:spring-doc.cadn.net.cn

  • 将请求参数(即表单数据或查询参数)绑定到模型对象。spring-doc.cadn.net.cn

  • 将基于String的请求值(例如请求参数、路径变量、 请求头、Cookie 等)转换为控制器方法参数的目标类型。spring-doc.cadn.net.cn

  • 在渲染 HTML 表单时,将模型对象的值格式化为 String 值。spring-doc.cadn.net.cn

@InitBinder 个方法可以注册控制器专用的 java.beans.PropertyEditor 或 Spring ConverterFormatter 组件。此外,您还可以使用 WebFlux Java 配置 在全局共享的 FormattingConversionService 中注册 ConverterFormatter 类型。spring-doc.cadn.net.cn

@InitBinder 方法支持许多与 @RequestMapping 方法相同的参数,但不包括 @ModelAttribute(命令对象)参数。通常,它们会声明一个 WebDataBinder 参数用于注册,并具有 void 返回类型。 以下示例使用了 @InitBinder 注解:spring-doc.cadn.net.cn

@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 注解。

或者,当通过共享的 Formatter 使用基于 FormattingConversionService 的配置时,您可以采用相同的方法,注册控制器特定的 Formatter 实例,如下例所示:spring-doc.cadn.net.cn

@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)。