본문 바로가기

⭐ SpringBoot/𝄜 게시판 with SpringBoot

30. ObjectMapper(JSON을 객체로 변환)

(동영상 보면서 정리 필요...)

# 요약

자바 객체를 JSON으로 변환 String json = objectmapper.writeValueAsString(burger); 오브젝트 맵퍼를 가지고 writeValueAsString이라는 메소드를 호출할때 입력 값으로 자바 객체인 (burger)를 넣는다. 이 책체가 json으로 튀어 나온다. 또한 그 반대인 json 객체를 자바 객체로 변환 하였는데, Burger burger = objectmapper.readValue(json, Burger.class); 오브젝트 맵퍼가 readValue라는 메소드를 호출 하는데 여기에서 첫번째 입력값으로 json을 넣고 입력된 json으로 만들 새로운 객체의 타입을 Burger.class 뒤에다가 넣어주면 Burger burger 를 리턴하고 객체를 만들어 준다.

그리고 json 노드를 만들때 일일히 하드코딩 하지 않고 json 노드를 가지고 키와 값을 put 하는 방식으로 만들수 있었고, 새로운 노드를 set 하는 방식으로 json 노드를 만들수 있다는 것 까지 정리하면 된다.

@Test
public void JSON을_자바_객체로_변환() throws JsonProcessingException {
    // 준비
    ObjectMapper objectmapper = new ObjectMapper();
    /*
    {
        "name" : "맥도날드 슈비버거",
        "price" : 5500,
        "ingredients" : ["통새우 패티", "순쇠고기 패티", "토마토", "스파이시 어니언 소스"]
    }
    */
    ObjectNode objectNode = objectmapper.createObjectNode();
    objectNode.put("name", "맥도날드 슈비버거");
    objectNode.put("price", 5500);

    ArrayNode arrayNode = objectmapper.createArrayNode();
    arrayNode.add("통새우 패티");
    arrayNode.add("순쇠고기 패티");
    arrayNode.add("토마토");
    arrayNode.add("스파이시 어니언 소스");
    objectNode.set("ingredients", arrayNode);
    String json = objectNode.toString();

 

# ObjectMapper를 활용하여, JSON과 자바 객체간 변환을 연습 한다.

 

ObjectMapper란 JSON과 자바객체간 변환을 제공하는 객체 이다.

앞서 요청한 JSON을 DTO로 만들고 응답을 위한 DTO를 JSON으로 변환시킨 객체이다.

 

실제 코드를 활용한 ObjectMapper 실습

여기서는 JSON을 JAVA 객체로 변환해보고, JAVA 객체를 JSON으로 변환하는 과정을 실습한다.

디버깅 AOP를 적용하여 객체간 변환 과정을 살펴본다.

 

objectmapper이라는 패키지 폴더를 만들고 해당 폴더 안에 Burger라는 자바 클래스 파일을 생성 후 아래와 같이 작성한다.

Burger 파일 전체 코드

package com.example.firstproject.objectmapper;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;

import java.util.List;

@NoArgsConstructor
@AllArgsConstructor
@ToString
@Getter
public class Burger {
    private String name;
    private int price;
    private List<String> ingredients;
}

그래고 생성된  Burger 파일에서 테스트 케이스를 생성한다.

BurgerTest라는 테스트 파일이 생성되고 코드는 아래와 같이 작성한다.

BurgerTest 전체 코드

package com.example.firstproject.objectmapper;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.junit.jupiter.api.Test;

import java.util.Arrays;
import java.util.List;

import static org.junit.jupiter.api.Assertions.*;

class BurgerTest {

    @Test
    public void 자바_객체를_JSON으로_변환() throws JsonProcessingException {
        // 준비
        ObjectMapper objectmapper = new ObjectMapper();
        List<String> ingredients = Arrays.asList("통새우 패티", "순쇠고기 패티", "토마토", "스파이스 어니언 소스");
        Burger burger = new Burger("맥도날드 슈비버거", 5500, ingredients);

        // 수행
        String json = objectmapper.writeValueAsString(burger);

        // 예상
        String expected = "{\"name\":\"맥도날드 슈비버거\",\"price\":5500,\"ingredients\":[\"통새우 패티\",\"순쇠고기 패티\",\"토마토\",\"스파이스 어니언 소스\"]}";

        // 검증
        assertEquals(expected, json);
        JsonNode jsonNode = objectmapper.readTree(json);
        System.out.println(jsonNode.toPrettyString());
    }

    @Test
    public void JSON을_자바_객체로_변환() throws JsonProcessingException {
        // 준비
        ObjectMapper objectmapper = new ObjectMapper();
        /*
        {
            "name" : "맥도날드 슈비버거",
            "price" : 5500,
            "ingredients" : ["통새우 패티", "순쇠고기 패티", "토마토", "스파이시 어니언 소스"]
        }
        */
        ObjectNode objectNode = objectmapper.createObjectNode();
        objectNode.put("name", "맥도날드 슈비버거");
        objectNode.put("price", 5500);

        ArrayNode arrayNode = objectmapper.createArrayNode();
        arrayNode.add("통새우 패티");
        arrayNode.add("순쇠고기 패티");
        arrayNode.add("토마토");
        arrayNode.add("스파이시 어니언 소스");
        objectNode.set("ingredients", arrayNode);
        String json = objectNode.toString();

        // 수행
        Burger burger = objectmapper.readValue(json, Burger.class);

        // 예상
        List<String> ingredients = Arrays.asList("통새우 패티", "순쇠고기 패티", "토마토", "스파이스 어니언 소스");
        Burger expected = new Burger("맥도날드 슈비버거", 5500, ingredients);

        // 검증
        assertEquals(expected.toString(), burger.toString());
        JsonNode jsonNode = objectmapper.readTree(json);
        System.out.println(jsonNode.toPrettyString());
        System.out.println(burger);
    }
}

'⭐ SpringBoot > 𝄜 게시판 with SpringBoot' 카테고리의 다른 글

29. AOP에 대해 알아보  (0) 2022.04.11
28. IOC 와 DI  (0) 2022.04.11
27. DB 설치 및 연동  (0) 2022.04.11
26. 댓글 삭제 with JavaScript  (0) 2022.04.11
25. 댓글 수정 with 자바스크립트  (0) 2022.04.08