Backend/Spring+Boot

@RequestParam, @ModelAttribute 생략

findmypiece 2021. 8. 4. 21:08
728x90

Spring 기반 프로젝트에서 Controller 내부 메소드의 인자에 지정하는 어노테이션이다. 일반적으로 primitive type은 @ReuqestParam 로 지정하고 reference type 은 @ModelAttribute 로 지정한다. 그런데 만약 이를 생략하면 어떻게 되나? primitive type는 자동으로 @ReuqestParam을 지정한 것처럼 동작하고 reference type은 자동으로 @ModelAttribute를 지정한 것처럼 동작한다.

 

그런데 또 한가지 중요한 사실이 있으니 @ReuqestParam 의 required 는 default 가 true로 요청시 해당 파라미터가 존재하지 않으면 기본적으로 에러가 발생한다. 파라미터로 primitive type 를 사용하고 @ReuqestParam 를 선언했을 때는 어떨까? 이 때는 required 가 false 인 것처럼 동작한다. 헷갈리지 말아야 할 중요한 사실이다.

 

@RequestParam, @ModelAttribute 를 생략하면 POJO 형태로 작성할 수 있다는 장점이 있지만 명시적으로 작성하는게 권장되기도 하고 그렇게 하는게 추후 분석에도 좋을 것 같다.

 

더군다나 해당 어노테이션에서 제공하는 옵션들을 잘만 활용하면 반복적인 코드량도 감소시킬 수 있다. 대표적으로 @RequestParam 의 required 옵션은 필수값 체크를 대신해준다.

728x90