1.16.20
: lombok.anyConstructor.addConstructorProperties
기본값이 false
로 변경되었다.@XXXConstructor
, @Data
, @Value
등을 사용할 경우 @java.beans.ConstructorProperties 로 생성자에 생상자 파라미터의 이름을 주입해줬고, Java Jackson JSON Library 등의 라이브러리가 객체 생성시 이 애노테이션 정보를 통해 객체를 생성했었다.false
가 되고, 기본 생성자가 없는 상태에서는 객체를 생성하는 라이브러리들이 객체 생성시 어떤 프라퍼티를 생성자의 어느 파라미터로 넣어야 하는지 알 수가 없기 때문에 올바른 객체 생성이 안된다.lombok.anyConstructor.addConstructorProperties=true
로 설정한다.is
로 시작하는 boolean 일 경우 문제 발생소지가 있음.booean isSomething;
필드는 Lombok 이 something
이라는 프라퍼티로 간주하고 getter/setter 는 사실상 setSomething/isSomething
으로 생성되는데, 문제는 isSomething
필드를 직접 읽는 일부 라이브러리는 프라퍼티를 isSomething
으로 해석해버림. 그런데 getter/setter 에 isSomething()/setSomething()
은 Java Bean 표준상 프라머티가 something
이다.isSomething
프라퍼티)와 메소드(something
)에 둘다 적용되면서 두 프라퍼티 중 하나는 잘못 작동하게 된다.@JsonProperty("isSomething") boolean isSomething; // 기존에는 이 필드와 Lombok이 생성한 ''boolean isSomething()'' 메소드 때문에 // 프라퍼티가 JSON 필드가 두 개로 생성됨. // 그런데 이 JSON을 사용하는 개발자가 something 프라퍼티를 사용했다. // 버전업 이후 아래와 같이 setter 에도 애노테이션이 복제됨. @JsonProperty("isSomething") boolean setSomething(boolean sohmething) { ... } // 이로인해 Jackson 라이브러리는 setSomething/isSomething getter/setter 가 생성한 // ''something'' 프라퍼티를 json 필드로 만들지 않고 삭제해버림. // something 프라퍼티 사용하던 곳은 모두 오류 발생.