Представьте себе код вроде этого:
@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) {
...
}
Я использую связыватель инициализации, чтобы избежать привязки поля, и я помечаю метод (prepareUser ()) с помощью @ModelAttribute чтобы подготовить мой объект User перед его привязкой. Поэтому, когда я вызываю / user / save, выполняются initBinder () и prepareUser ().
Я установил "user" как в @InitBinder, так и в @ModelAttribute, чтобы Spring-MVC мог понять, что эти методы следует применять только перед выполнением метод с @ModelAttribute ("user").
Проблема в том, что метод, аннотированный @ModelAttribute ("user"), выполняется перед каждым сопоставленным методом этого контроллера. Например, если я вызываю / users, prepareUser выполняется перед методом list (). Как я могу сделать так, чтобы этот подготовитель выполнялся только до того, как метод save () имеет все методы в одном контроллере?
Спасибо