
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로 잘 바뀐 것을 확인할 수 있다 😀
참고: