본문 바로가기

카테고리 없음

[validation] @RequestParam에서 @NotNull, @NotEmpty, @NotBlank를 어떻게 사용할 것인가

@NotNull과 @NotBlank의 차이가 뭔지 살펴보고, 적용해보고 있었다.

 

그러던 중No validator could be found for constraint 'javax.validation.constraints.NotBlank' validating type 'java.lang.Integer'.

이라는 에러가 발생했고,

 

검색 결과 @NotBlank(또는 @NotEmpty)는 String 타입에 대한 validation annotation이였다.

만약 null값을 허용하고 싶지 않다면, @NotNull을 넣어주어야 한다.

 

그런데 여기서 생각해볼 문제가 하나 더 있다.

"굳이 @RequestParam을 사용하는 곳에서 @NotNull이 필요한가?"

잘 생각해보면 필요하지 않다는 것을 알 수 있다.

 

RequestParam은 GET요청과 함께 쓰인다.

GET요청이라 함은, URL에 데이터를 쿼리스트링(즉, String값이라는 것이다)으로 담아 보낸다. 이 말은 즉슨, null값을 보낼 수가 없다는 것이다!!(중요) JSON으로 데이터를 주고 받는 POST요청과는 다르게, GET요청은 무조건 String으로 값이 들어오기 때문에, null값을 줄래야 줄 수가 없다. null이 String으로 인식되기 때문이다.

 

심지어 RequestParam은 required option으로 필수 여부를 지정한다. null이고 아니고를 판명할 수가 없기 때문에, 아예 해당 데이터를 안보낼 것인지 보낼 것인지를 required option으로 결정하는 것이다.

 

그렇다면, RequestParam에서는 @NotNull이 필요없다는 결론이 나게 된다.

 

물론, @NotEmpty, @NotBlank는 의미가 있다. 이들은 String에 관련된 어노테이션이기 때문이다.

 

 

정리를 해보자면,

@RequestParam에서는

- @NotNull은 필요없다(아예 null값을 보낼 수 조차 없다...)

- @NotEmpty, @NotBlank는 String 타입 파라미터에는 사용될 수 있다.