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
반응형