这一部分示例见这个项目的 mvc 分支下的 WebDataBinderController.javahtml
@InitBinder
自定义数据绑定 用@InitBinder
注解的控制器方法,容许你直接在你的控制器类中配置 Web 数据绑定。@InitBinder
标记初始化WebDataBinder
的方法,WebDataBinder
被用于填充被注解的处理方法的命令和表单对象参数。java
这些初始化绑定器(Init-binder)方法支持@RequestMapping
方法支持的全部参数,处理命令/表单对象以及相关的校验结果对象。初始化绑定器方法必须不带返回值,因此它们一般被声明为 void 的。典型的参数包括WebDataBinder
和WebRequest
或者java.util.Locale
,容许用代码方式注册特定上下文的编辑器(context-specific editors)。git
下面的例子演示了使用@InitBinder
为全部的java.util.Date
表单属性配置一个CustomDateEditor
:web
@Controller public class MyFormController { @InitBinder protected void initBinder(WebDataBinder binder) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); dateFormat.setLenient(false); binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false)); } // ... }
相对地,从 Spring 4.2 开始,考虑使用addCustomFormatter
来指定Formatter
实现以代替PropertyEditor
实例。若是你刚好在一个共享的FormattingConversionService
中也有一个个基于Formatter
的设置(setup),这会很是用,一样的规则能够用重用于控制器指定的绑定规则的变化:spring
@Controller public class MyFormController { @InitBinder protected void initBinder(WebDataBinder binder) { binder.addCustomFormatter(new DateFormatter("yyyy-MM-dd")); } // ... }
ebBindingInitializer
为了表达(externalize)数据绑定初始化,你能够提供一个自定义的WebBindingInitializer
接口实现,而后你能够经过为RequestMappingHandlerAdapter
来提供一个自定义 Bean 配置来启动WebBindingInitializer
,因此要重写默认配置。mvc
下面的例子来自 PetClinic 应用程序(虽然文档上说了一下,可我也不知道这个项目在哪里……),展现了一个配置,使用一个自定义WebBindingInitializer
接口实现——org.springframework.samples.petclinic.web.ClinicBindingInitializer
,它配置的PropertyEditors
须要几个控制器。app
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="cacheSeconds" value="0"/> <property name="webBindingInitializer"> <bean class="org.springframework.samples.petclinic.web.ClinicBindingInitializer"/> </property> </bean>
@InitBinder
方法也能够定义在一个带有@ControllerAdvice
注解的类中,在这种状况下,它们用于匹配控制器。这提供了一个使用WebBindingInitializer
的代替方法。详情见“使用@ControllerAdvice
和@RestControllerAdvice
通知控制器一节”。编辑器