스프링 공부/어노테이션 정리

@JsonInclude

장아장 2023. 1. 2. 15:55

백엔드를 공부해본 사람은 알 것이다. 

모든 프로젝트의 데이터는 Json 타입으로 넘어간다. 

그래야 프론트엔드에서 이를 받아 출력문을 만들기 수월해진다. 

 

이렇게 Json타입으로 넘어가는 데이터를 관리하는데에 쓰이는 어노테이션중 하나가 JsonInclude이다. 

 

객체에 데이터가 존재하고, 이 객체가 Json타입으로 넘어가 인스턴스들을 데이터로 가지고 프론트엔드로 간다. 

이 때, 넘어가는 데이터에 Json으로 어떤 것들이 넘어가는지를 정할 수 있다. 

 

그러면 어떻게 그 데이터들을 정할 수 있을까? 

@JsonInclude가 없고 해당 객체의 데이터를 프론트엔드로 넘기면,

데이터가 어떤 상태건 모든 데이터가 Json으로 프론트엔드로 넘어간다.

 

이 때 어노테이션과 괄호에 추가 설정을 통해 어떻게 데이터를 넘길지 정할 수 있다. 

JsonInclude.Include.~~를 정해 바꿀 수 있는데, 이 종류를 한번 정리해보았다. 

ALWAYS
인스턴스의 값이 어떤 상태이던 간에 값이 Json에 포함된다. 
NON_NULL null값이 아닌 값들만 Json에 포함된다.
NON_ABSENT null값과 참조형 인스턴스의 "absent"(참조형 인스턴스가 만들어졌지만 값이 정해지지 않은 경우)가 아닌 값들만 Json에 포함된다. 
NON_EMPTY 비어있는 값들을 제외하고 Json에 포함된다. 
비어있다는 뜻은,
1. null값이다. 
2. 호출형 인스턴스가 값을 가지지 않은 absent상태거나
3. Collection(예를들면 List).isEmpty가 참이거나
4. Array.length가 0이거나
5. String.length()가 0일 때
NON_DEFAULT default값들을 제거한다. 
예를 들어, Integer x가 인스턴스로 존재할 때, default = 0으로 되어있을 때, 이 값이 0이라면 default로 제거된다. 
추가적으로 NON_EMPTY도 적용된다. 
CUSTOM 개별적인 valueFilter와 contentFilter를 적용해 Json에 들어갈 데이터를 정한다. 이는 후에 만들 일이 있다면 링크를 달아두겠다. 
USE_DEFAULT 번역도 돌려보고 공식 설명 페이지도 가보았지만, 자세한 설명은 얻지 못했다. 
이해한 바로는, 기본값이 의미가 있을 때 사용한다고 하는데, 이런 경우를 생각해보질 못했다. 
이 또한 후에 쓰거나 이해하는 순간이 있다면 설명을 수정하겠다. 

 

'스프링 공부 > 어노테이션 정리' 카테고리의 다른 글

@EventListner  (0) 2024.02.02
@뭐시깽이Constructor  (0) 2023.01.02
@Log(@Slf4j를 써보다가 궁금해서 찾아본 내용 정리)  (3) 2023.01.01
@Bean  (0) 2022.12.28
@Configuration  (0) 2022.12.28