복붙노트

[SPRING] Spring 3 Validator가 모델의 모든 것을 검증하는 이유는 무엇입니까?

SPRING

Spring 3 Validator가 모델의 모든 것을 검증하는 이유는 무엇입니까?

나는 방법 중 하나에 대한 유효성 검사기가있는 스프링 3 컨트롤러가 있습니다. 모델의 모든 객체의 유효성을 검사합니다. 왜이 일을하는 이유나 내가 잘못한 일을 누군가에게 설명 할 수 있습니까?

문서에 따르면, 5.7.4.3 Spring MVC (http://static.springsource.org/spring/docs/3.0.0.RC3/spring-framework-reference/html/ch05s07)에서 사용하기 위해 JSR-303 Validator를 구성합니다. html)

예:

@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 ()가 생깁니다.

감사!

해결법

  1. ==============================

    1.나는이 행동이 문서에서 잘 다루어지지 않는다고 생각한다.

    나는이 행동이 문서에서 잘 다루어지지 않는다고 생각한다.

    문제는 다음과 같은 원인으로 발생합니다.

    해결책은 @InitBinder의 범위를 특정 속성으로 제한하는 것입니다.

    @InitBinder("whaleFormData")
    protected void initBinder(WebDataBinder binder) { ... }
    
  2. from https://stackoverflow.com/questions/4715860/why-is-my-spring-3-validator-validating-everything-on-the-model by cc-by-sa and MIT license