본문 바로가기
웹개발/SpringBoot

ObjectMapper

by 철없는민물장어 2023. 3. 14.
728x90

ObjectMapper를 알아보자..

restAPI를 이용할 때, 클라이언트가 보낸 JSON데이터는 자동으로 DTO로 변환되고,

서버에서 클라이언트로 데이터를 보낼때에도 DTO에서 JSON으로 자동으로 변환되었다.

 

어떻게 변환되는 것인지.. 그 동작을 살펴보자

@Test
    public void 자바_객체를_JSON으로_변환() throws JsonProcessingException {
        //준비
        List<String> ingredients = Arrays.asList("shrimp","beef","bread","tomato");
        Burger burger = new Burger("burger",5500,ingredients);
        ObjectMapper objectMapper = new ObjectMapper();

        //수행. objectMapper.writeValueAsString메소드를 통해 객체를 JSON으로 변환
        String json = objectMapper.writeValueAsString(burger);
        //예상

        String expected = "{\"name\":\"burger\",\"price\":5500,\"ingredients\":[\"shrimp\",\"beef\",\"bread\",\"tomato\"]}";
        //검증
        assertEquals(expected,json);
        JsonNode jsonNode = objectMapper.readTree(json);
        System.out.print(jsonNode.toPrettyString());
    }

자바 객체를 JSON으로 변환하는 예시이다.

ObjectMapper.writeValueAsString()을 이용하면, 자바 객체를 JSON으로 쉽게 변환할 수 있다.

 

@Test
    public void JSON을_자바_객체로_변환() throws JsonProcessingException {
        //준비
        ObjectMapper objectMapper = new ObjectMapper();

        String json = "{\"name\":\"burger\",\"price\":5500,\"ingredients\":[\"shrimp\",\"beef\",\"bread\",\"tomato\"]}";


        //수행
        Burger burger = objectMapper.readValue(json,Burger.class);
        //예상
        List<String> ingredients = Arrays.asList("shrimp","beef","bread","tomato");
        Burger expected = new Burger("burger",5500,ingredients);
        //검증
        assertEquals(expected.toString(),burger.toString());
    }

반대로, JSON을 자바 객체로 변환하는 경우는

ObjectMapper.readValue를 이용하면 된다.

이 때 메소드의 첫번째 인자는 json을, 두번째 인자는 변환할 타입을 입력하면 된다.

 

        //String json = "{\"name\":\"burger\",\"price\":5500,\"ingredients\":[\"shrimp\",\"beef\",\"bread\",\"tomato\"]}";
        /*
        * {
        *   "name":"burger"
        * }
        *
        * */
        ObjectNode objectNode = objectMapper.createObjectNode();
        objectNode.put("name","burger");
        objectNode.put("price",5500);

        ArrayNode arrayNode = objectMapper.createArrayNode();
        arrayNode.add("shrimp");
        arrayNode.add("beef");
        arrayNode.add("bread");
        arrayNode.add("tomato");
        objectNode.set("ingredients",arrayNode);

        String json = objectNode.toString();

(추가)

JSON데이터를 만드는 방법은

ObjectNode.put을 이용하여 키와 밸류를 입력하고

ObjectNode.toString()을 이용하여 String형으로 변환하면 된다.

728x90

댓글