2012-06-13 2 views
4

다음 중첩 객체가 있습니다. 컨트롤러에서 유효성 검사를 위해 @Valid를 사용하고 있습니다. 여기서 BindingResult 객체는 Child 객체의 이름 필드의 유효성을 검사하지 않습니다. 내가 놓친 게 있니?스프링 MVC 3 중첩 된 객체 유효성 검사가 @Valid로 실패했습니다

class Parent{ 
     @Valid 
     private Child child; 
     //getter and setter for child object 
} 

class Child{ 
    @NotNull(messag="Name cannot be null") 
    private String name; 
    //getter and setter for name 
} 

My controller validate method 

@RequestMapping(value = "/validate", method = RequestMethod.POST) 
public @ResponseBody String validate(@Valid @ModelAttribute("parent") Parent parent, BindingResult bindingResult) { 
    //Here I can see child name value if I say parent.getChild().getName() 

    // But if parent.getChild().getName() is null, bindingResult.hasErrors() is returning false 

} 

답변

2

내가 아는 한, @NotNull은 문자열 검증에 적합하지 않습니다. 스프링 모델은 종종 "빈 객체"를 "빈 문자열"에 매핑하기 때문입니다.

@NotBlank을 시도해보고 BindingResults가 오류를 반환하는지 확인하십시오.

-1

언젠가는 비슷한 문제가 발생했습니다.

2-3 일 후 R & D 중첩 된 개체의 유효성 검사에 성공했습니다. 중첩 된 개체에 대한 사용자 지정 유효성 검사를 수행하려고했습니다.

사용자 정의 유효성 검사기 클래스를 만들고 컨트롤러 및 메서드 호출 validator.validate (parent, bindingResult)에서 자동 와이어 링해야하며 bindingResult 객체의 중첩 된 객체 필드로 바인드 된 오류를 반환하고 평소대로 jsp 페이지에 표시 할 수 있습니다.

희망이 도움이됩니다. 건배.

0

이렇게하면 안됩니다. 그런 중첩 된 객체를 유효성 검사 할 수 없습니다.

유효성 검사기를 사용해야합니다.

관련 문제