private String bEDate;
public String getbEDate() { ... }
파라메터로 bSDate라는 필드 이름을 명시했는데 보니까 bsdate 즉 카멜케이스가 하나도 들어가지 않았던 이 현상은 Jackson의 기본 네이밍 전략과 Java Bean 규칙 떄문이다.
@JsonProperty("bSDate")
private String bSDate;
위와 같은 어노테이션은 Jakson에게 명시적으로 해당 필드 명을 bSDate로 정확히 사용해라.
즉 JSON -> Java 역직렬화, Java -> JSON 직렬화 양방향 모두에서 대소문자를 포함한 이름을 강제 고정해줍니다.
왜 어노테이션을 안쓰면은 bsdate가 되는지 먼저 알아야한다.
원인은 Java Bean Getter 규칙 + Jackson 기본 동작에있다.
Jackson은 필드 이름을 직접 쓰지 않고, 기본적으로 getter/setter 이름을 기준으로 JSON 프로퍼티명을 결정한다.
private String bSDate;
public String getbSDate() { ... }
이 경우, Java Bean 규칙상: getbSDate() → 프로퍼티 이름: bsdate
이유: get 제거 → bSDate 첫 글자 소문자 변환 + 연속 대문자 무시 즉, Java는 bSDate → bsdate 로 해석한다.
이건 Jackson 문제가 아니라 Java 표준 규칙이다.
{
"bsdate": "20250101"
}
Jackson은 이를 정상적인 camelCase라고 판단하며,.bedate처럼 중간 대문자 2개 연속은 Java Bean 규칙상 보호되지 않습니다.
@@@여기서 중요한건 중간 대문자 2개 연속은 Java Bean 규칙상 보호되지 않는거다.@@@
bEdate 안됌.(의미 불분명)
bEDate 안됌.(약어 혼합)
beDate 가능.(정상 camelCase)
두 번째 글자가 대문자면, 첫 글자를 소문자로 변환하지 않음, 하지만 bEDate는 이 조건에 해당하지 않음.
@JsonProperty("bSDate")
private String bSDate;
이게 가능한 이유는
1.Jackson이 Bean 규칙을 무시하고
2.JSON 키 이름을 강제 고정
사실상 해결 방법은 필드 명을 바꾸면된다..그럴까 했지만 이미 프로시저 내에서 Request를 이렇게 설정을 해서
사용했던 어노테이션이자 방법이였다. 이런거 많았는데 ,,
private String beginStartDate; // 또는 beginDate / startDate
나도 위와같은 필드명을 사용하도록 해야겠다. 카멜케이스에서 두개의 대문자는 피해야 하겠다..
'JAVA' 카테고리의 다른 글
| [Java] Exception Error message Front-end error message로 뿌리기. (0) | 2025.12.22 |
|---|---|
| [JAVA] Naver News API 적용 (2) | 2025.08.26 |
| [Java] 이미지 미리보기 C: 경로에 있는 파일 불러오기 (1) | 2025.07.04 |
| [JAVA] application.properties에서 log 설정 (1) | 2025.05.27 |
| [JAVA] 파일 다운로드 API 간단하게 구현 + Front End 다운로드 기능 까지. (0) | 2025.04.21 |