Spring Boot

QueryParameter Dto로 받기

최-코드 2024. 12. 10. 11:29

상황 : 동적 쿼리를 만들기 위해 요청 데이터에 Condition 값을 받아야 한다.

 

문제 : Dto를 받기 위해 @RequestBody을 사용했는데 만약 프론트에서 이 dto에 해당하는 데이터를 아예 전송하지 않으면 dto 변수가 null값을 가지게 되어 NullPointerException이 발생했다.

 

해결 : dto 선언 인자 앞에 @RequestParam, @RequestBody 모두 붙이지 않으면 된다.

 

이유

  • 쿼리 파라미터가 dto에 바인딩될 때는 생성자를 통해 먼저 객체를 생성한 다음 setter를 이용한다.
  • 따라서 무족건적으로 인스턴스를 생성하므로 dto 변수 자체에 대해서는 NullPointerException이 발생하지 않는다.
  • 대신 dto 안에 필드랑 쿼리 파라미터가 매핑되지 않으면 필드값이 null값이 된다.