Java
[Java] Lombok @Getter boolean 변수명 주의할 점
snail voyager
2023. 9. 26. 23:59
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
반응형