If you want to format all your dates without having to repeat the same code in every Controller, you can create a global InitBinder in a class annotated with @ControllerAdvice annotation.
Steps
1. Create a DateEditor class that will format your dates, like this:
public class DateEditor extends PropertyEditorSupport {
public void setAsText(String value) {
try {
setValue(new SimpleDateFormat("dd/MM/yyyy").parse(value));
} catch(ParseException e) {
setValue(null);
}
}
public String getAsText() {
String s = "";
if (getValue() != null) {
s = new SimpleDateFormat("dd/MM/yyyy").format((Date) getValue());
}
return s;
}
2. Create a class annotated with @ControllerAdvice (I called it GlobalBindingInitializer):
@ControllerAdvice
public class GlobalBindingInitializer {
/* Initialize a global InitBinder for dates instead of cloning its code in every Controller */
@InitBinder
public void binder(WebDataBinder binder) {
binder.registerCustomEditor(Date.class, new DateEditor());
}
}
3. In your Spring MVC configuration file (for example webmvc-config.xml) add the lines that allow Spring to scan the package in which you created your GlobalBindingInitializer class. For example, if you created GlobalBindingInitializer in the org.example.common package:
<context:component-scan base-package="org.example.common" />
Finished!
Sources: