@InitBinder не работает с именем метода значения - PullRequest
0 голосов
/ 25 июня 2018

Как мне применить init binder только к методу? Я много искал, чтобы найти ответ на этот вопрос. Согласно docs Значение в @InitBinder - это имена атрибутов команды / формы и / или параметров запроса, к которым должен применяться этот метод init-binder. Я хочу занести поле модели в черный список только для определенного метода-обработчика. Следующий код - мой код.

@InitBinder("saveCustomerProfile")
  public void initBinder(WebDataBinder binder) 
  binder.setDisallowedFields(new String[]{"cbr1"});
}

Ниже приведена моя подпись метода обработчика.

@RequestMapping(method= RequestMethod.POST, value="/saveCustomerInfo.htm")
public ModelAndView saveCustomerProfile( @ModelAttribute @Valid CustomerProfile customerProfile, BindingResult result, HttpServletRequest request)throws Exception{
String[] suppressedFields = result.getSuppressedFields();
         if (suppressedFields.length > 0) { throw new Exception("You've attempted to bind fields that aren't allowed by @InitBinder: "+ StringUtils.arrayToCommaDelimitedString(suppressedFields));  
}}

когда я удаляю @Initbinder 'value', запрещенные поля устанавливаются, и он выдает исключение. Т.е. он работает глобально для всего контроллера. Как я могу ограничить его использование только для определенного метода? Я хочу запретить поле 'cbr1' в модели customerProfile, когда вызывается метод обработчика /saveCustomerInfo.htm (только для этого метода). Я упомянул ссылку , чтобы реализовать это, но не работает .. кто-нибудь может помочь?

1 Ответ

0 голосов
/ 25 июня 2018

@ InitBinder работает с именем атрибутов команды / формы.Он не работает с именем метода. В вашем случае вы должны указать @ModelAttribute ("saveCustomerProfile"), который будет связывать его с определенной командой.

public ModelAndView saveCustomerProfile (@ModelAttribute ("saveCustomerProfile") @ValidCustomerProfile customerProfile, результат BindingResult, запрос HttpServletRequest) создает исключение {

...