Springboot로 Notify 서버를 개발하던 중 @Builder 어노테이션으로 객체를 생성하였다. 그런데 필드명이 isScrapped
인 필드의 이름이 JSON 응답에서 scrapped
로 바뀌는 오류가 발생했다.
API 스펙에서는 isScrapped
라는 항목으로 응답하기로 약속되어있다. 그런데 응답의 notices
안의 isScrapped
가 아래처럼 scrapped
로 전달되는 오류가 발생했다.
@Builder @Getter @Setter
public class NoticeResponse {
long noticeId;
String title;
String noticeDate;
String url;
boolean isScrapped;
}
@Builder
와@Getter
는getter
메서드를 이용한다.
그런데isScrapped
는boolean
타입이므로getter
를 생성할 때 앞에is
가 붙는다. 따라서is
가 생략된다.
isScrapped
의getter
를 직접 만들어준다.
아래와 같이 코드를 짜보았다.@Builder @Getter @Setter public class NoticeResponse { long noticeId; String title; String noticeDate; String url; boolean isScrapped; public boolean isScrapped() { return isScrapped; } }
그런데 이렇게 해도 해결되지 않았다 😭 그래서 열심히 구글링 해보았다.
현재 문제는 프로그램 코드 레벨에서는 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
로 잘 바뀐 것을 확인할 수 있다 😀
참고: