У меня есть контроллер 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 (), который он получил от моего уровня сохранения.
Спасибо!