본문 바로가기
JAVA

[JAVA] @JsonProperty 사용 이유

by 승븐지 2025. 12. 30.
반응형
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

나도 위와같은 필드명을 사용하도록 해야겠다. 카멜케이스에서 두개의 대문자는 피해야 하겠다.. 

반응형