티스토리 뷰
728x90
반응형
What?
Java 객체를 JSON으로 Serialize 할 때,
API Request, Response 으로 JSON 으로 변환 할 때,
DTO 객체를 Mybatis 에 전달할 때 등등
boolean 타입 필드명의 'is' 가 누락되는 현상
@Getter
@Setter
public class Car {
private boolean isElectronic;
}
// {"electronic":false}
Why?
Lombok의 @Getter를 사용하게 되면 boolean 필드는 getter 메소드가 아니라 is 메소드를 생성 (getIsElectronic 이 아닌 isElectronic)
is로 시작하는 필드명은 is가 중복되지 않고 생성 (isIsElectronic 이 아닌 isElectronic)
@Getter
@Setter
public class Car {
private boolean isElectronic;
private boolean enabled;
/* byte code decompile
public boolean isElectronic() {
return this.isElectronic;
}
public void setElectronic(final boolean isElectronic) {
this.isElectronic = isElectronic;
}
public boolean isEnabled() {
return this.enabled;
}
public void setEnabled(final boolean enabled) {
this.enabled = enabled;
} */
}
// {"enabled":true,"electronic":false}
How?
boolean 타입의 변수명은 is를 붙이지 않는게 좋지만 어쩔수 없이 변수명을 유지해야한다면 두가지 방법
1. @JsonProperty 로 JSON 필드명을 명시
@Getter
@Setter
public class Car {
@JsonProperty("isElectronic")
private boolean isElectronic;
/* byte code decompile
public boolean isElectronic() {
return this.isElectronic;
}
public void setElectronic(final boolean isElectronic) {
this.isElectronic = isElectronic;
} */
}
// {"isElectronic":false}
2. @Getter(AccessLevel.NONE) 으로 Lombok으로 getter 메소드를 생성하지 않도록 설정하고 getter 메소드를 직접 생성
@Getter
@Setter
public class Car {
@JsonProperty("isElectronic")
private boolean isElectronic;
public boolean getIsElectronic() {
return this.isElectronic;
}
/* byte code decompile
public void setElectronic(final boolean isElectronic) {
this.isElectronic = isElectronic;
} */
}
// {"isElectronic":false}
728x90
반응형
'Java' 카테고리의 다른 글
[Java] 날짜, 시간 API (0) | 2023.10.18 |
---|---|
[Java] Lambda 표현식으로 리펙토링 (1) | 2023.10.12 |
[Java] ConcurrentHashMap (0) | 2023.09.13 |
[Java] Map 디폴트 메소드 (0) | 2023.09.10 |
[Java] List, Map 정적 팩토리 메소드 (0) | 2023.09.10 |
반응형
300x250