2016-03-17 5 views
1

Я пытаюсь проверить свою форму с помощью весового валидатора, с @Validated.Spring @Validated и @InitBinder

Однако я смущен, почему мне нужно указать Validator в @InitBinder.

Вот мой соответствующие фрагменты кода от контроллера:

@InitBinder("organisationForm") 
private void initBinder(WebDataBinder binder) { 
    binder.setValidator(new OrganisationFormValidator()); 
} 

@RequestMapping(value = "/addOrganisation", method = RequestMethod.POST) 
public String addOrganisationPost(@Validated @ModelAttribute("organisationForm") OrganisationForm organisationForm, BindingResult bindingResult) { 

    if (bindingResult.hasErrors()) { 
     return "configuration/addOrganisation"; 
} 

Это прекрасно работает, но мне нужно будет указать @InitBinder для каждого из моих запросов.

Spring есть способ РЕГИСТРАЦИИ всех конвертеров, как так:

@Override 
public void addFormatters(FormatterRegistry formatterRegistry) { 
    ConversionServiceFactory.registerConverters(getConverters(), 
    formatterRegistry); 
} 

нет ли «Validation службы» весна, что смотрит через все валидатор и выбирает правильную, возможно, с использованием методы supports подкрепленный Validator интерфейс Spring:

public boolean supports(final Class<?> clazz) { 
    return OrganisationForm.class.isAssignableFrom(clazz); 
} 

Просто кажется странным, это не существует в Spring. Я что-то неправильно понял?

+0

Кажется странным, что вы не используете рамки проверки. – zeroflagL

+0

@zeroflagL Я использую [Validation Spring Framework] (http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/validation/Validator.html) – dkanejs

+0

Извините, мой комментарий сформулирован плохо. Я имел в виду нечто вроде проверки боба. Это намного легче imho. – zeroflagL

ответ

2

Вы можете использовать @ControllerAdvice, чтобы добавить валидаторы в свои связующие объекты, и вы можете указать атрибуты модели и ExceptionHandler.

Если вы хотите использовать валидаторы через контроллер (или через определенный список контроллеров), вы можете указать ему классы контроллера, используя его атрибуты.

@ControllerAdvice(assignableTypes = { Controller1.class, Controller2.class}) 
+0

Хорошее решение, но мне по-прежнему требуется привязать валидаторы специально для каждого связующего, например '@InitBinder (" organisationForm ")'. Не существует способа зарегистрировать все валидаторы и использовать '@ Validated' метод' Validator' 'поддерживает метод' find', чтобы найти правильный? – dkanejs

+1

@Geditdk Если вы не хотите связывать валидаторы, вы можете использовать фреймворк 'jsr 303'. Реализации, обеспечиваемые как «спящим», так и «весенним» – Pragnani

Смежные вопросы