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값이 된다.