스프링
노출하고싶지 않은 Json값
winwin-k9
2023. 4. 13. 00:52
프로젝트를 하면서 백엔드 서버 작업을 하고, api를 제공을 해야했다.
json의 공통된 스펙을 가져가면 응답을 지정하기에 편리하고 생산성이 향상된다고 생각했고 이를 시도 하려고 했다.
"message": "응답메시지",
"data": data
message에 응답에 대한 메시지를 넣고 , data에 이에 해당하는 데이터를 넣어서 응답을 하려고 했다.
@AllArgsConstructor
public class BaseResponse<T>{
private ResponseMessage message;
private T data;
public BaseResponse(ResponseMessage message) {
this.message = message;
}
public static <T> BaseResponse success(ResponseMessage message, T data) {
return new BaseResponse(DATA_SUCCESSFULLY_PROCESSED);
}
}
post나 put요청시에 전체 데이터에 대한 정보를 보여주기 보다는, 데이터가 잘 넘어갔다는 메시지만 띄워주려고 했지만,
문제점은 data가 들어가지 않았을때에도 data가 null값으로 Body에 찍히기 때문에 보기 좋지 않았다.
이를 코드단에서 상속이나 다른 방법으로 해결하려고 했지만 더 복잡해지고 유지보수하는데 더 시간이 들 것 같아서 다른 방법을 사용하였다.
@AllArgsConstructor
public class BaseResponse<T>{
private ResponseMessage message;
@JsonInclude(JsonInclude.Include.NON_EMPTY)
private T data;
public BaseResponse(ResponseMessage message) {
this.message = message;
}
public static <T> BaseResponse success(T data) {
return new BaseResponse(DATA_SUCCESSFULLY_PROCESSED);
}
}
@JsonInclude(JsonInclude.Include.NON_EMPTY) 해당 어노테이션을 이용하면 해당 Key값이 null이면 Body에 그 값이 보이지 않는다.
이렇게 간단한 어노테이션으로 Json스펙을 자유자재로 변화시킬 수 있다.
728x90