Как определить несколько 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());
}
Другие вопросы по тегам