Как определить несколько initBinders
Возможно ли иметь несколько методов initBinder внутри одного контроллера? Где каждый InitBinder() (см. Код) зависит от уникального обработчика запросов, например, initBinder() вызывается по URL: "/update/account" и initBinderOne() по "update/account/pass"?
Я бы предпочел иметь один контроллер для всех обновлений, а не несколько. Пожалуйста, порекомендуйте.
@Controller
@RequestMapping(value="/uodate/account")
public class UpdateController {
@RequestMapping(method=RequestMethod.GET)
public String updateAccount(@ModelAttribute("account") Account account...){
..
}
@RequestMapping(method=RequestMethod.POST)
public String update(@Valid Account account...){
...
}
@RequestMapping(value="/pass", method=RequestMethod.GET)
public String updatePass(@ModelAttribute("account") Account account...){
...
}
@RequestMapping(value="/pass",method=RequestMethod.POST)
public String updatePass(@Valid Account account...){
...
}
@InitBinder("account")
public void initBinder(WebDataBinder binder){
binder.setValidator(validateAccount);
binder.setAllowedFields(new String[]{"accountId","accountname","firstName",
"lastName","address"});
}
@InitBinder("account")
public void initBinderOne(WebDataBinder binder){
binder.setValidator(validatePassword);
binder.setAllowedFields(new String[]{"accountId","password});
}
1 ответ
Spring не поддерживает присоединение нескольких валидаторов к одной команде. Однако вы можете определить несколько методов @InitBinder для разных команд. Например, вы можете поместить следующее в один контроллер и проверить параметры user1 и user2:
@InitBinder("user1")
protected void initUser1Binder(WebDataBinder binder) {
binder.setValidator(new User1Validator());
}
@InitBinder("user2")
protected void initUser2Binder(WebDataBinder binder) {
binder.setValidator(new User2Validator());
}