@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 타입 파라미터에는 사용될 수 있다.