[Error] Response JSON에서 Boolean의 is가 생략되는 문제

Jihyoung·2023년 4월 10일
1

Error

목록 보기
1/1
post-thumbnail

문제 상황

Spring boot에서 Response를 내려주기 위해 아래와 같이 Vo를 작성해 주었습니다.

그런데!! is 로 시작된 값이 실제로 객체로 내려올 때 is 가 생략된채로 내려오는 문제가 발생했습니다🥲

혹시나 하는 마음에 @JsonProperty 를 이용해 value에 json에 매핑 될 key값을 지정해 줬는데 더더욱 놀라운 일이 생겼습니다..!!!

아래와 같이 @JsonProperty 에서 지정해 준 값과 기존의 변수 값이 모두 출력되는 일이 발생했습니다

원인

해당 문제의 원인은 Spring의 @Lombok 때문이라고 합니다.
Lombok 은 boolean 타입일 때 변수의 prefix 가 is 인 경우 getIsNew() 대신, isNew() 라고 get 메소드를 만듭니다.

예시로 한번 확인해봅시다.
아래와 같이 객체를 만들어서 함수를 확인해보겠습니다.

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class Vo {
    boolean isNew;

}

@Getter 로 만들어진 메소드는 isNew() 이고,
@Setter 로 만들어진 메소드는 setNew() 인 것을 확인 할 수 있습니다.

여기서 boolean 을 Boolean으로 해서 다시 확인을 해본다면,
@Getter 로 만들어진 메소드는 getIsNew() 이고,
@Setter 로 만들어진 메소드는 setIsNew() 인 것을 확인 할 수 있습니다.

변수 타입을 boolean으로 작성할 경우 is prefix를 자동 생성해주는 것이죠!

공식 문서를 확인해보면 동일한 이름과 동일한 매개 변수 수를 가진 메서드가 이미 있으면 메서드가 생성되지 않는다고 합니다..!!

해결 방안

이를 해결하기 위해서 컬럼의 타입을 Primitive Type이 아니라 Reference Type으로 바꿔 문제를 해결 할 수 있었습니다.

Reference

profile
로그를 생활화

2개의 댓글

comment-user-thumbnail
2023년 4월 17일

처음 에러를 접했을 때, 당황하셨겠네요😥 그나저나, Reference type이면 왜 정상작동 하는걸까요? 동작과정이 궁금하네요

답글 달기
comment-user-thumbnail
2023년 4월 17일

Spring은 무조건 Wrapper class로 하는걸 권장합니다.
다른 문제이지만 boolean Boolean때문에 문제가 생긴적도 있었습니다.
그리고 null을 관리할 수 있다는 점이 정말 좋습니다

답글 달기