Back-end/Java Language

@JsonIgonore, @JsonProperty, @JsonNaming & Jackson Object Mapper

prden 2023. 1. 7. 13:30

"Java Object" =Serialize=> "JSON", (2) "JSON" =Deserialize=> "Java Object"

JSON(JavaScriptObjectNotation) 상하차가 쉬운 언어는 Javascript

0. JSON 이란? = 데이터를 보관하는 형식 

복잡한 데이터를 인터넷에서 유저들끼리 주고 받을 때 깔끔한 형식으로 데이터를 담는데 필요한 형식이 있다. 이 중에 XML, CSV, JSON이 있다. 

 1) XML

<데이터이름>값</데이터이름>

 2) CSV

 Year, Brand, Mode

 1997,Ford, E350

 3) JSON  ~ ... YAML, BSON, SMILE 등

-> 보통 설정 파일에 많이 사용한다. ex) package.json

 

※ JSON 이랑 JavaScript의 일반  Object는 다르다.

var obj = { name: 'kim', age : 30}

var json = JSON.stringify(obj)

console.log(json); // {"name" : "kim", "age":30}

console.log(obj) // {name: 'kim', age : 30}

//JSON을 Object로 변환하기 위해서
var a = JSON.parse(json)
console.log(a) // {name: 'kim', age : 30}

1. 직렬화, 역직렬화

https://prde.tistory.com/34

 

직렬화(Serialization)

1. 의미 객체를 컴퓨터에 저장했다가 다음에 다시 꺼내 쓸 때 혹은 네트워크를 통해 컴퓨터 간에 서로 객체를 주고받을 때 직렬화를 통해 가능하다.(직렬화 한 후에 저장하거나 전송하고 필요할

prde.tistory.com

 

2. JsonIgnore

JSON 직렬, 역직렬화를 무시할때 사용

사용예시는 아래 참고

https://velog.io/@hth9876/JsonIgnorePropertiesignoreUnknown-true

 

@JsonIgnore, @JsonIgnoreProperties, @JsonIgnoreType차이점

json 데이터를 받아와서 객체로 맵핑할 때 클래스에 선언되지 않은 프로퍼티가 json에 있으면 오류 발생 (json 구성 = 클래스 구성)이럴 때 예외 발생시키지 말고 무시출처: https://darksilber.tistory.com/28

velog.io

api 개발을 할 때 응답결과 데이터를 위한 class는 하나인데 상태에 따라 항목이 달라지는 경우 null이냐 아니냐에 따라 항목을 숨기거나 보여주도록 처리할 수 있다. 아래 @JsonInclude(JsonInclude.include.NON_NULL)을 추가해 주면 null인 데이터는 json 결과에 나타나지 않는다. 사용예시(https://junho85.pe.kr/1626)

@JsonInclude(JsonInclude.Include.NON_NULL)

3. Jackson Object Mapper

  1. Convert "Java Object" to "JSON"
  2. Convert "JSON" to "Java Object"
  3. Convert "JSON" to "Jackson JsonNode"
  4. Convert "JSON Array String" to "Java List"
  5. Convert "JSON String" to "Java Map"
 @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        ObjectMapper objectMapper = new ObjectMapper();
        //
        objectMapper.activateDefaultTyping(objectMapper.getPolymorphicTypeValidator(), ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
        objectMapper.enable(DeserializationFeature.ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT);
        objectMapper.registerModule(new JavaTimeModule());

        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory());
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer(objectMapper));
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer(objectMapper));

        return redisTemplate;

https://interconnection.tistory.com/137

 

Jackson ObjectMapper 정리

개요 Java 개발자라면 Jackson에서 제공하는 ObjectMapper와 자주 마주치게 됩니다. Java 클래스 내용을 확인하거나 내용물의 Parsing 과정에 필요한 커스터마이징이 존재하기 때문입니다. 물론 중요한 기

interconnection.tistory.com

https://www.logicbig.com/tutorials/misc/jackson/jackson-json-type-info-annotation.html

 

 

4.@JsonProperty, @JsonNaming

https://newwisdom.tistory.com/m/45

 

@JsonProperty, @JsonNaming

2021-04-30글 이 글을 쓴 배경... 클라이언트에서 HTTP Body에 Json을 실어 요청을 실어 보내고 이를 받는 DTO를 만들어 사용하고 있었다. 하지만 API 명세로 클라이언트에서는 key 네이밍으로 스네이크 케

newwisdom.tistory.com

 

'Back-end > Java Language' 카테고리의 다른 글

Java Wrapper class  (0) 2023.01.29
Java Optional, Stream  (0) 2023.01.29
Exception Handling  (0) 2023.01.01
super()와 super  (0) 2022.12.11
JAR와 WAR의 차이점  (0) 2022.12.10