JAVA/Application
[Spring] DTO 매핑시 특정 키만 null 값
히어로맛쿠키
2024. 11. 6. 09:14
나머지 값들은 다 정상적으로 매핑되어 값이 잘 들어가는데, 특정 키만 null로 들어가는 것을 발견했다.
원인은 필드명이었다.
아래 글 덕분에 알게 되었다.
https://bcp0109.tistory.com/309
문제가 되는 필드명은 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. 필드명 다시 짓기
반응형