본문 바로가기
웹개발/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
반응형

댓글