2013년 7월 24일 수요일

Spring3 @Valid 사용시, BigDecimal 문제

Spring 3 에서 제공하는 @Valid 의 경우 Hibernate 의 Validation 을 이용한다. 그런데 BigDecimal 에 대한 처리가 부족하다.

에러의 양상은 아래와 같다.

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is javax.validation.UnexpectedTypeException: HV000030: No validator could be found for type: java.math.BigDecimal.

이와 같은 오류는 대체적으로 아래와 같은 이유로 발생한다.

1. @NotEmpty 에서 오류가 발생한다. [해결책] @NotNull 을 이용한다.

2. @DecimalMin 이나 @Min 등에서 오류가 발생한다. [해결책] @NumbeerFormat(style = Style.NUMBER), @Range 을 이용한다.

2번의 경우 @NumberFormat 으로는 Number 인지만 체크할 뿐 범위 체크는 불가능하다. pattern 을 통한 제어를 해보려고 했으나, 무시당하는 기분이다(?). Hibernate 에서 제공하는 @Range 을 통해 범위 제어가 가능하다. 다른 정수/실수형 변수에도 @DeciamlMin 같은 것보다 이걸 쓰는 것을 검토해봐야겠다.

Java 코드 내에서 범위를 한 번 더 체크해야 할 것 같다.