개발을 진행하다가 Lombok @Builder 어노테이션을 사용하여 부모 클래스 필드 값을 세팅했는데도 불구하고 로그를 찍어보면 부모 클래스 필드가 전부 null 인 문제점이 발생했습니다.
간단하게 예시를 들자면 아래와 같습니다.
Parent.class
@Builder public class Parent { protected String a; protected String b; }
Child.class
@Builder public class Child extends Parent { private String c; private String d; private String e; }
Controller.class
@Slf4j @RestController public class Controller { @ApiOperation(value = "예시 샘플") @PostMapping(value = {"/example"}) public Child example() { return Child.builder() .a("a") .b("b") .c("c") .d("d") .e("e") .build(); } }
예상되는 Output (Expected Output)
{ "a": "a", "b": "b", "c": "c", "d": "d", "e": "e" }
실제 Output (Actual Output)
{ "a": null, "b": null, "c": "c", "d": "d", "e": "e" }
위 예시처럼 부모 클래스의 필드는 기존의 @Builder 어노테이션으로 설정을 할 수 없기 때문에 stackoverflow를 검색하던 와중 @SuperBuilder 어노테이션을 발견했습니다.
답변에 의하자면 lombok 1.18.2 버전부터 @SuperBuilder라는 어노테이션을 사용할 수 있고 해당 어노테이션은 딱 제가 원하는대로 작동했습니다.
위 Parent.class 와 Child.class에서 @Builder를 @SuperBuilder로 바꿔준다면 실제 Output 과 동일한 결과가 나옵니다!
출처) https://stackoverflow.com/questions/44948858/lombok-builder-on-a-class-that-extends-another-class
반응형
'[DEV] 기록' 카테고리의 다른 글
Tomcat에서 jsessionid가 URL에 붙는 것을 방지하는 설정 (0) | 2020.09.08 |
---|---|
jQuery 동적으로 form 생성 후 POST 방식으로 전송 (0) | 2020.08.19 |
@Pattern 어노테이션을 통해 전화번호가 유효한 형태인지 검증 (0) | 2020.07.28 |
Jenkins ERROR: Labels must follow required specs (0) | 2020.07.20 |
Eclipse, STS 한글 깨짐 방지 설정 (0) | 2020.07.20 |