2012-03-26 6 views
0

요청에 숫자 변수가 유효한지 확인하려는 중입니다.이 필드는 null이 아니며 숫자 여야합니다. null 및 변환 오류에 대해 다른 오류가보고 싶습니다.주석 기반 요청 유효성 검사

내가 org.springframework.format.annotation.NumberFormat이

가 왜 @NumberFormat이 기본 메시지 속성이 없습니다하지 않는 사용하려고했다

? 이것이 놓친 이유가 있습니까? 이제 메시지 리소스 번들을 사용하지 않아서 사용자 정의해야합니다.

public class AddToJobsShortListWSRequest implements Serializable { 

@NumberFormat(style = NumberFormat.Style.NUMBER) 
@NotNull(message="ASL01") 
private Long userDetailId; 

컨트롤러

public ResponseEntity<String> handlePostRequest(String xmlRequest, String... externalIds) { 

    ResponseEntity<String> response = null; 
    Set<Enum> enums = new HashSet<Enum>(); 
    AddToJobsShortListWSRequest addToJobsShortListWSRequest = serializationDeserializationSupport.fromString(xmlRequest, AddToJobsShortListWSRequest.class); 

    if(!jsonRequestValidator.validate(AddToJobsShortListWSError.class, enums, addToJobsShortListWSRequest)) 
    { 
     response = getBadRequestErrorResponseEntity(enums); 
    } 
    else{ 
..... 
} 

검사기

private void validate(@SuppressWarnings("rawtypes") Class enumClass, Object object, @SuppressWarnings("rawtypes") Set<Enum> enums) { 
    BindException errors = new BindException(object, "object"); 

    validator.validate(object, errors); 

    @SuppressWarnings({"rawtypes"}) 
    List fieldErrors = errors.getFieldErrors(); 

    for (int i = 0; i < fieldErrors.size(); i++) { 
     if (fieldErrors.get(i) instanceof FieldError) { 
      String m = ((FieldError) fieldErrors.get(i)).getDefaultMessage(); 
      enums.add(Enum.valueOf(enumClass, m)); 
     } 
    } 
} 

다른 주석 기반의 유효성 검사가 여기에 적용 할 수 있습니까? 또한 유효성 검사 순서는 무엇입니까? NumberFormat, NotNull? 사전 :

+0

컨트롤러 코드 및 오류 메시지를 게시 할 수 있습니까? –

+0

은 http://stackoverflow.com/questions/149506/annotation-based-spring-bean-validation의 중복 질문 일 수 있습니다. – kandarp

답변

1

에서

덕분에 그것은 놓친되지 않았습니다 - 유효성 검사가 필요한 그리고 봄은 국제화 시설로 메시지 리소스 번들을 지원하는 것보다 단지 더 간단합니다.

특수한 경우 - 의 경우 특별하지 않을 수 있습니다. 특별한 구현이 필요합니다.

또한 유효성 검사의 순서가 보장되지 않습니다. 각 유효성 검사는 처리하지 않는 모든 경우를 처리해야합니다. 따라서 숫자 유효성 검사는 다른 유효성 검사에서 빈 값과 null 값을 사용해야합니다.

저는 매우 간단한 hello-world 유형 케이스 인 @NotNull 또는 @NotEmpty에 유용한 주석 기반 유효성 검사를 찾습니다. 그 밖의 모든 것에 대해서는 필자가 commons validator에 더하여 내 자신의 주석을 더 선호한다. 왜냐하면 필자는 필자가 필요하다면 패턴과 공통 검증을 정의하고 정의 된 순서대로 실행할 수 있기 때문이다.

+0

맞습니다. 그렇다면 스프링은 메시지 리소스 번들을 i18n 기능으로 만 지원합니다 . 그래서 그것이 jsr-303과 다른 곳입니다. 감사합니다. –

관련 문제