@Builder @Getter "is" 사라짐 오류

이정빈·2024년 4월 30일
0

트러블슈팅

목록 보기
2/7
post-thumbnail

오류 상황

Springboot로 Notify 서버를 개발하던 중 @Builder 어노테이션으로 객체를 생성하였다. 그런데 필드명이 isScrapped인 필드의 이름이 JSON 응답에서 scrapped로 바뀌는 오류가 발생했다.

오류 내용

  • API 스펙

API 스펙에서는 isScrapped라는 항목으로 응답하기로 약속되어있다. 그런데 응답의 notices 안의 isScrapped가 아래처럼 scrapped로 전달되는 오류가 발생했다.

오류 원인 코드

  • [NoticeResponse.java]
@Builder @Getter @Setter
public class NoticeResponse {
    long noticeId;
    String title;
    String noticeDate;
    String url;
    boolean isScrapped;    
}

예상 원인

@Builder@Gettergetter메서드를 이용한다.
그런데 isScrappedboolean 타입이므로 getter를 생성할 때 앞에 is가 붙는다. 따라서 is가 생략된다.


예상 해결 방안

isScrappedgetter를 직접 만들어준다.
아래와 같이 코드를 짜보았다.

@Builder @Getter @Setter
public class NoticeResponse {
    long noticeId;
    String title;
    String noticeDate;
    String url;
    boolean isScrapped;
    public boolean isScrapped() {
        return isScrapped;
    }
}

그런데 이렇게 해도 해결되지 않았다 😭 그래서 열심히 구글링 해보았다.


실제 해결 방법

@JsonProperty 이용

현재 문제는 프로그램 코드 레벨에서는 isScrapped라고 표현이 되지만 JSON 응답 시에만 scrapped라고 표시되는 것이다.

따라서 JSON 속성의 이름을 지정하는 @JsonProperty를 이용하였다.

@Builder @Getter @Setter
public class NoticeResponse {
    long noticeId;
    String title;
    String noticeDate;
    String url;
    boolean isScrapped;
    
    // Json 응답 시 is가 사라지는 것을 방지
    @JsonProperty("isScrapped")
    public boolean isScrapped() {
        return isScrapped;
    }
}

JSON 응답에도 isScrapped로 잘 바뀐 것을 확인할 수 있다 😀

참고:

profile
사용자의 입장에서 생각하며 문제를 해결하는 백엔드 개발자입니다✍

0개의 댓글