JAVA/Application

[Spring] DTO 매핑시 특정 키만 null 값

히어로맛쿠키 2024. 11. 6. 09:14

 

나머지 값들은 다 정상적으로 매핑되어 값이 잘 들어가는데, 특정 키만 null로 들어가는 것을 발견했다.

원인은 필드명이었다.

 

아래 글 덕분에 알게 되었다.

 

https://bcp0109.tistory.com/309

 

Spring Request DTO 에 null 값이 들어가는 이유 (Jackson, Lombok)

Overview Spring Boot 로 REST API 를 테스트 하다가 이상한 이슈에 직면했습니다. 클라이언트에서 @RequestBody 로 요청을 받기 위한 DTO 클래스를 만들고 값을 입력 받았는데 null 값이 입력되는 겁니다. 처

bcp0109.tistory.com

 

 


문제가 되는 필드명은 cId였다. 

소문자 하나 다음에 바로 대문자가 나오는 필드명이 문제가 되는 것이다.

 

Spring은 http 요청을 Dto로 매핑하는 Message Converter로 Jackson을 사용한다. Jackson은 Getter 메서드명에서 필드명을 추출하는데, 그 추출 방식이 원인이다. Jackson은 맨앞부터 이어지는 대문자를 모두 소문자로 변경해 리턴한다. cId 필드의 Getter명은 getCId이고, 맨앞부터 이어지는 대문자를 모두 소문자로 바꾸면 필드명이 cid로 추출되어버려서 기존 cId 필드와 매핑이 불가했던 것이다. 

 

.

.

 

이 문제를 해결하기 위한 방법은 아래와 같다.

 

1. Lombok 말고, 직접 Getter만들기

- getCId가 아닌 getcId라는 이름으로 만들자

(cf. Intellij 기능으로 Getter를 생성하면 그렇게 된다)

2. 해당 DTO 필드에 @JsonProperty("cId")와 같이 명시해주기

3. 필드명 다시 짓기

반응형