To customize request parameter data binding, we can use @InitBinder annotated methods within our controller.
- The @InitBinder annotated methods will get called on each HTTP request if we don’t specify the ‘value’ element of this annotation.
- Each time this method is called a new instance of WebDataBinder is passed to it.
- To be more specific about which objects our InitBinder method applies to, we can supply ‘value’ element of the annotation @InitBinder. The ‘value’ element is a single or multiple names of command/form attributes and/or request parameters that this init-binder method is supposed to apply to.
@InitBinder("User") public void customizeBinding (WebDataBinder binder) { . . . }
@Controller @RequestMapping("/register") public class UserRegistrationController { @InitBinder("user") public void customizeBinding (WebDataBinder binder) { SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd"); dateFormatter.setLenient(false); binder.registerCustomEditor(Date.class, "dateOfBirth", new CustomDateEditor(dateFormatter, true)); } . . }
simpleDateFormat.setLenient(false); — Will check for out of range Date. For Example, If lenient is set to true, Aug 32 will be converted to Sep 1 .