Is there an annotation-based way to register PropertyEditors worldwide in Spring MVC 3.0?

I was wondering if there is a way to register PropertyEditor globally in Spring MVC 3.0 and beyond. In the documentation for their documentation, they show how to use annotations to configure the bean PropertyEditor for each controller, and - it seems to me like an XML way to do this globally. So I was wondering if there is a way using only annotations to register PropertyEditors for all controllers without having to use the @InitBinder method for each of them. Creating a common superclass using the @InitBinder method is also not recommended.

A question on this question was asked before Spring 3.0 was released.

+6
spring-mvc javabeans annotations
source share
1 answer
package com.projectr.web; import java.text.SimpleDateFormat; import java.util.Date; import org.springframework.beans.propertyeditors.CustomBooleanEditor; import org.springframework.beans.propertyeditors.CustomDateEditor; import org.springframework.beans.propertyeditors.CustomNumberEditor; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.support.WebBindingInitializer; import org.springframework.web.context.request.WebRequest; import org.springframework.web.multipart.support.ByteArrayMultipartFileEditor; /** * Shared WebBindingInitializer for custom property editors. * * @author aramirez * */ public class CommonBindingInitializer implements WebBindingInitializer { public void initBinder(WebDataBinder binder, WebRequest request) { binder.registerCustomEditor(Integer.class, null, new CustomNumberEditor(Integer.class, null, true)); binder.registerCustomEditor(Long.class, null, new CustomNumberEditor( Long.class, null, true)); binder.registerCustomEditor(Boolean.class, null, new CustomBooleanEditor(true)); binder.registerCustomEditor(byte[].class, new ByteArrayMultipartFileEditor()); SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy", request.getLocale()); dateFormat.setLenient(false); binder.registerCustomEditor(Date.class, null, new CustomDateEditor(dateFormat, true)); } } 

In your context application or servlet dispatcher

  <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="webBindingInitializer"> <bean class="com.projectr.web.CommonBindingInitializer"/> </property> </bean> 

Equivalence symbol for the above code. Note that @ControllerAdvice is introduced in Spring 3.2.x

 @ControllerAdvice public class CommonBindingInitializer { @InitBinder public void registerCustomEditors(WebDataBinder binder, WebRequest request) { binder.registerCustomEditor(Integer.class, null, new CustomNumberEditor(Integer.class, null, true)); binder.registerCustomEditor(Long.class, null, new CustomNumberEditor( Long.class, null, true)); binder.registerCustomEditor(Boolean.class, null, new CustomBooleanEditor(true)); binder.registerCustomEditor(byte[].class, new ByteArrayMultipartFileEditor()); SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy", request.getLocale()); dateFormat.setLenient(false); binder.registerCustomEditor(Date.class, null, new CustomDateEditor(dateFormat, true)); } } 
+5
source share

All Articles