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