2013-05-31 1 views
0

들어오는 콜렉션의 유효성을 검사 할 때까지 Spring MVC와 hibernate annotation을 사용하여 들어오는 요청 객체의 유효성을 검사하고 있었지만 괜찮았다.spring mvc validator가 콜렉션에 대해 유효하지 않음

@RequestMapping(value = "/guests", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE) 
public ResponseEntity<Set<GuestResource>> postGuestsToAttendance(
     @Valid @RequestBody Set<RequestToAddGuest> guestRequests) throws FieldValidationException, 
     RequestBodyResourceBadRequestException 

제가 생각한 것처럼 Set 내부에서 개별 구성원이 아닌 Set 자체에서 유효성 검사를 수행하려고했습니다.

약간의 연구 끝에 '쉬운'솔루션을 찾지 못했지만 대신 사용자 정의 유효성 검사기를 찾아 호출했습니다. 필자는 사용자 정의 유효성 검사기를 필요로하지 않기 때문에 세트의 각 항목에 대한 유효성 검사를 호출하는 방법 일 뿐이므로이를 모두 작동 시키려고했지만 아무 소용이 없습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

다음
for (RequestToAddGuest guestRequest : guestRequests) { 
     // Perform validation 
     BindingResult bindingResults = new DirectFieldBindingResult(guestRequest, RequestToAddGuest.class.getName()); 
     validator.validate(guestRequests, bindingResults); 
     checkForErrors(bindingResults); 
    } 

가 checkForErrors 코드 :

여기 내 호출 코드입니다. 독방 개체에만 @Valid를 사용했을 때 효과적이었습니다.

protected void checkForErrors(BindingResult results) throws FieldValidationException { 
    if (results.hasErrors()) { 
     FieldValidationException exception = new FieldValidationException(); 
     exception.setFieldErrors(results.getFieldErrors()); 
     throw exception; 
    } 
} 

그리고 참조

가 여기 검증 주석과 RequestToAddGuest 클래스입니다 : ... 나는이 문제를 발견,

import org.hibernate.validator.constraints.NotEmpty; 
import org.hibernate.validator.constraints.SafeHtml; 

public class RequestToAddGuest { 

    @NotEmpty 
    @SafeHtml 
    public String firstName; 

    @SafeHtml 
    @NotEmpty 
    public String lastName; 

    @SafeHtml 
    public String emailAddress; 

    @SafeHtml 
    public String streetLine1; 

    @SafeHtml 
    public String streetLine2; 

    @SafeHtml 
    public String streetLine3; 

    @SafeHtml 
    public String city; 

    @SafeHtml 
    public String stateCode; 

    @SafeHtml 
    public String zip; 

    @SafeHtml 
    public String countryCode; 

    @SafeHtml 
    public String phoneArea; 

    @SafeHtml 
    public String phoneNumber; 

    @SafeHtml 
    public String phoneExtension; 

} 

답변

0

좋아, 내가 그렇게 유효성 검사 코드에 붙들려 먹은, 내가했다 내 변수 이름을 간과 한 채로 간과했다 ... 나는 guestRequest라는 전체 목록보다는 개별 guestRequest에서 호출되도록 유효성 검사 호출을 변경하지 않았다. *