Почему мой Spring 3 Validator проверяет все на модели?

У меня есть контроллер Spring 3 с валидатором для одного из методов. Он настаивает на проверке каждого объекта в модели. Сможет ли кто-нибудь объяснить мне, почему он это делает, или если я? m что-то не так?

Согласно документации, 5.7.4.3 Настройка валидатора JSR-303 для использования Spring MVC ( http://static.springsource.org/spring/docs/3.0.0.RC3 /spring-framework-reference/html/ch05s07.html)

С JSR-303 единственный экземпляр javax.validation.Validator обычно проверяет все объекты модели, которые объявляют ограничения проверки. Чтобы настроить валидатор с поддержкой JSR-303 и Spring MVC, просто добавьте в путь к классам поставщика JSR-303, например Hibernate Validator. Spring MVC обнаружит это и автоматически включит поддержку JSR-303 для всех контроллеров.

Пример:

@Controller
public class WhaleController {

        @Autowired
        private Validator myValidator;

        @Autowired
        private WhaleService whaleService;

        @InitBinder
        protected void initBinder(WebDataBinder binder) {
                binder.setValidator(this.myValidator);
        }

        @RequestMapping(value="/save-the-whales")
        @Transactional
        public void saveTheWhales(@Valid WhaleFormData formData, BindingResult errors, Model model) {
                if (!errors.hasFieldErrors()) {
                        Whale whale = new Whale();

                        whale.setBreed( formData.getBreed() );

                        this.whaleService.saveWhale( whale );

                        model.addAttribute("whale", whale);

                }
                model.addAttribute("errors", errors.getFieldErrors());
        }

}

При запуске он будет жаловаться, что Whale является недопустимой целью для myValidator (который настроен на проверку WhaleFormData, и это нормально) . Whale - это POJO без ограничений валидации, аннотаций и нигде конфигурации. Методом проб и ошибок я обнаружил, что ЛЮБОЙ объект, помещенный в модель, будет пытаться пройти валидацию и потерпит неудачу, если валидатор не настроен для его обработки. С примитивами все в порядке.

Может ли кто-нибудь сказать мне, почему это так, указать мне на соответствующую документацию и / или подсказать, как лучше всего добавить что-то в модель без ее проверки?

В приведенном выше случае я бы сделал это хотел бы поместить "кита" на модель, так как теперь у него будет уникальный whaleId (), который он получил от моего уровня сохранения.

Спасибо!

31
задан Josh Johnson 17 January 2011 в 21:44
поделиться