나머지 값들은 다 정상적으로 매핑되어 값이 잘 들어가는데, 특정 키만 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. 필드명 다시 짓기
'JAVA > Application' 카테고리의 다른 글
[Spring AOP] Consumer onMessage() 비동기 수신 로깅 (0) | 2024.10.31 |
---|---|
[Redis] cannot deserialize from Object value (SerializationException) (0) | 2024.10.27 |
다량의 이미지 업로드 속도 최적화 / 트래픽 대비 / 비동기 처리 (0) | 2024.09.23 |
[Spring] Cache : 프로젝트에 간단히 적용해둠 (1) | 2024.03.28 |
[Java][Backend] null 반환 리팩터링 (0) | 2024.03.08 |