Imagine a code like this one:
@RequestMapping(value="/users", method=RequestMethod.GET) public String list(Model model) { ... } @InitBinder("user") public void initBinder(WebDataBinder binder) { binder.setDisallowedFields("password"); // Don't allow user to override the value } @ModelAttribute("user") public User prepareUser(@RequestParam("username") String username){ ... } @RequestMapping(value="/user/save", method=RequestMethod.POST) public String save(@ModelAttribute("user") User user, Model model) { ... } I use an init binder to avoid that a field can be binded and I mark a method (prepareUser()) with @ModelAttribute to prepare my User object before it is binded. So when I invoke /user/save initBinder() and prepareUser() are executed.
I have set "user" in both @InitBinder and @ModelAttribute so Spring-MVC could understand that this methods should only be applied before executing a method with @ModelAttribute("user").
The problem is that the method annotated with @ModelAttribute("user") is executed before every mapped method of this controller. For example if I invoke /users prepareUser is executed before list() method. How can I make that this preparer is only executed before save() method having all the methods in the same controller?
Thanks
prepareUseractually do?