[문제기록] Lombok @Getter 사용시 boolean 값 처리에 대하여

2023. 8. 30. 00:41·Logging/Spring
728x90
반응형

프로젝트를 하던 중, 다음과 같은 Request DTO 를 만들어야 할 일이 있어서 만들었다. 

 

 

@Getter
@Setter
@NoArgsConstructor
public class ACreateReqDto {

    private String name;
    
    // ... 
    
    private boolean hasRule;
    
    @JsonProperty("rule")
    private RuleCreateReqDto ruleDto;
    
    @Getter
    @Setter
    public class RuleCreateReqDto{
        
        private String ruleName;
        
        private boolean isAgeRule;
        
    }
}

 

 

이렇게 해서 다음과 같이 요청처리 코딩을 완료해서 다음과 같이 날려보았다. 

 

 

보낸 POST 요청 BODY JSON

 

 

다 잘 들어오는줄 알았는데, 이상하게도 isAgeRule 이 계속 false 로 들어오는 것을 발견하였다.  이상한 점은 RuleCreateReqDto 객체가 다 못들어오는게 아니라, [ruleName] 은 잘 받는데 [isAgeRule] 만 안들어오는 것이였다. 

 

 

이는 Data 매핑해주는 예외임이 너무 자명한 상황이라, ObjectMapper 가 Getter, Setter 를 통해서 만들어 줄 때 뭔가 실패하고 있는 것임을 직감할 수 있었다.  따라서 Lombok 의 Getter, Setter 가 boolean 값을 대상으로 어떤 함수를 만들어주는지 확인을 해보았다. 

 

 

먼저, ACreateReqDto.java 의 boolean 은 hasRuleJoin 이다. 관례적으로 boolean 은 is 로 시작하기 때문에, Lombok 에서 @Getter / @Setter 를 만들면 is 를 빼고 만들어준다. 따라서, 해당 클래스의 boolean 은 has 로 시작하기 때문에 Setter 가 다음과 같이 생성이 된 상태이다. 

 

 

// ACreateReqDto 의 Setter
public void setHasRuleJoin(boolean hasRuleJoin){
    return this.hasRuleJoin;
}

 

 

반면, RuleCreateReqDto 의 boolean 은 관례적인 isAgeRule 의 이름으로, is 로 시작하는 boolean 을 취했다. 이에 따라 Lombok 의  Setter 는 다음과 같이 set method 를 만들어주는 것을 확인했다. 

 

 

// RuleCreqteReqDto 의 Setter
public void setAgeRule(boolean isAgeRule){
    this.isAgeRule = isAgeRule;
}

 

 

따라서, ObjectMapper 가 필드 이름에 맞춰서 Setter 를 사용해서 매핑을 해줄 때, ACreateReqDto 의 것만 정상적으로 진행을 해줄 수 있었던 것이였다. 내가 직접 custom setter 를 다음과 같이 만들어주니 정상적으로 매핑되는 것을 확인할 수 있었다. 

 

 

// 직접 추가한 Setter
public void setIsAgeRule(boolean isAgeRule){
    this.isAgeRule = isAgeRule;
}

 

 

Lombok 의 @Getter / @Setter 를 boolean 에게도 활용함에 있어서는 항상 주의해야 한다 !! 이 점을 정확하게 알고 사용할 수 있도록 하자!!!!

 

 

그래도 롬복은 짱짱맨이다 힝

728x90
반응형

'Logging > Spring' 카테고리의 다른 글

[Spring MVC] org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 오류  (0) 2024.01.29
[JPA] OSIV 만 믿었다가 Lazy 로딩에 발등찍힌 썰  (0) 2024.01.27
Spring Boot 개발하면서 요즘 드는 생각  (0) 2023.12.13
[문제기록] DataJpaTest 시 NoSuchBeanDefinitionException / UnsatisfiedDependencyException  (0) 2023.08.14
'Logging/Spring' 카테고리의 다른 글
  • [Spring MVC] org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 오류
  • [JPA] OSIV 만 믿었다가 Lazy 로딩에 발등찍힌 썰
  • Spring Boot 개발하면서 요즘 드는 생각
  • [문제기록] DataJpaTest 시 NoSuchBeanDefinitionException / UnsatisfiedDependencyException
문케이크
문케이크
    반응형
  • 문케이크
    누구나 개발할 수 있다
    문케이크
  • 전체
    오늘
    어제
    • 전체 보기 (122)
      • CS 이론 (13)
        • 운영체제 (8)
        • 네트워크 (2)
        • 알고리즘 (0)
        • Storage (3)
      • Spring (26)
        • Spring 기본 (12)
        • Spring 심화 (0)
        • JPA (11)
        • Spring Security (3)
      • 리액티브 (0)
        • RxJava (0)
      • SW 설계 (14)
        • OOP (0)
        • UML (3)
        • OOAD (0)
        • Design Pattern (11)
      • Java (8)
      • 웹 운영 (17)
        • AWS (15)
        • 운영 구축 (2)
      • Testing (3)
        • Unit (3)
      • Extra (3)
        • API 적용 (1)
      • 인프라 기술 (5)
        • Kubernetes (2)
        • Elasticsearch (3)
      • Logging (7)
        • Spring (5)
        • 인프라 (2)
      • 일상 (2)
        • 음식점 리뷰 (2)
        • Extra (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • 문케이크의 블로그
  • 인기 글

  • 태그

    Design Pattern
    Configuration
    객체지향
    mockito
    lazy loading
    GoF
    단위테스트
    디자인 패턴
    lombok
    김영한
    SRP
    decorator
    JPA
    di
    composition
    Spring
    spring boot
    n+1
    OOP
    analyzer
    k8s
    BEAN
    spring container
    Java
    Setter
    OOAD
    runtime exception
    Composite
    elasticsearch
    junit
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
문케이크
[문제기록] Lombok @Getter 사용시 boolean 값 처리에 대하여
상단으로

티스토리툴바