위 블로그를 참고하여 수정
오타나 동작에 문제가 없는데 Spring boot Request DTO 에 null값이 들어온다면
변수명을 우선적으로 확인해야한다.
Object -> Json 으로 변환 하면 Getter의 이름 기준으로 바뀐다
Object 의 필드명을 Getter 로 바꿀 때 일반적으로 맨 앞 글자를 대문자로 바꿔준다
ex) name -> getName()
Jackson 은 Getter 를 기준으로 변환시키기 때문에 Jackson 내부적으로도 나름의 기준을 갖고 변환
기본적으로는 JavaBeans 규약을 따르지만 다른 부분이 있다.
JavaBeans 규약
- 클래스의 이름은 일반적으로 대문자로 시작하지만, 개발자들은 식별자가 소문자로 시작하는 것에 익숙하기 때문에 첫 번째 글자를 소문자로 변환
- 다만, 모든 문자를 대문자로 사용하는 경우도 있기 때문에 이런 경우는 예외
- 예외 케이스를 판별하기 위해 첫 두 문자가 모두 대문자인지를 확인
맨 앞 두개가 전부 대문자라면 그대로 리턴하고 아니라면 맨 앞 문자 하나만 소문자로 바꿔서 리턴한다.
그렇다면 Jackson 에서는?
JavaBeans 규약에서는 앞 두 글자가 대문자인 경우 그대로 사용한다고 했으나 Jackson 은 맨 앞부터 이어진 대문자를 모두 소문자로 변경
- AAaa -> aaaa : 앞 두 글자가 대문자라서 소문자로 변경
- BBBb -> bbbb : 앞 두 글자가 대문자라서 이어진 세번째 문자까지 소문자로 변경
- CCcC -> cccC : 앞 두 글자를 소문자로 변경하지만 맨 뒤의 대문자는 이어져 있지 않아서 그대로 사용
- DDDD -> dddd : 앞 두 글자부터 이어진 대문자를 모두 소문자로 변경
DTO 의 필드명이 대문자로 시작하면 Request 요청 시 값이 제대로 들어오지 않는다
필드명이 대문자로 시작하면 Getter 도 대문자로 시작하는 수밖에 없다
Jackson 의 규칙에 따라서 get 이후가 대문자로 시작하면 최소한 첫 글자는 항상 소문자로 바뀐다
따라서 기존에 사용한 bTitle 같은 컬럼명을 bookTitle 식으로 바꿔주었다..
'수업 & 공부' 카테고리의 다른 글
lambda (0) | 2022.10.01 |
---|---|
Wrapper Class란 (0) | 2022.09.29 |
Java - Collection (0) | 2022.09.29 |
동적 계획법 알고리즘 (Dynamic Programming) (0) | 2022.09.06 |
시간 복잡도 관련 참고할 글 (0) | 2022.08.25 |