[Spring] JSON Object 관련

이혜지·2020년 10월 14일
2

Spring

목록 보기
3/15
post-thumbnail

JAVA에서 객체를 박싱/언박싱 할때 사용하는 라이브러리는 주로 다음과 같다.

  • org-json
  • gson
  • jackson
  • json-simple
  • minimal-json

일단 왜 JSON 라이브러리가 중요한가 보면, JSON(Javascript Object Notation)은 현재 여러 플랫폼에서 통용되는 데이터 타입이라고 볼 수 있는데,
서버 <-> 클라이언트에 사용되는 주요 메세지 포맷이다.

데이터를 송/수신 할때 직접 byte 단위로 보내도 되지만, 이럴 경우 언어별로 각기 다른 처리를 해줘야하는 수고로움이 들기도 하고
사람들이 알아보기 힘든 면이 있다.
(JSON의 경우 사람이 알아보기 쉬운 구조로 되어 있는 동시에, 컴퓨터가 알아먹기 쉬운 구조로 되어있다)

따라서, 주로 웹 애플리케이션 서버<-> 브라우저, 클라이언트 간의 통신에서 주로 사용을 하게 되는데

JSON으로 주고 받는건 좋은데, 이럴 때 POJO(자바의 Plain Object)를 바로 클라이언트로 보낼 수 있으면 편리하겠다. 라는 생각으로 만들어진 것이다.

즉, 데이터를 담는 컨테이너 클래스를 생성하고 그 클래스를 파싱해서 JSON 으로 만들던지, JSON으로 받은 string 을 POJO로 변환하는 경우에 사용이 된다.

중요한건 위의 라이브러리는 여러개지만.. Spring에서 채택한 기본 JSON Object Mapper는 "Jackson" 이다.

일단 둘다 사용하려면 maven 이나 gradle dependency가 필요하다

Jackson과 Gson을 많이 사용하니 두개만 테스트 해 보자.


JSON String <-> POJO 박싱/언박싱 테스트

테스트로 사용할 POJO 클래스(Customer)

package jsonLab;

import java.util.List;

public class Customer{
	
   private String name;
    private int id;
    private List orders;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public List getOrders() {
        return orders;
    }

    public void setOrders(List orders) {
        this.orders = orders;
    }

    public Customer(String name, int id, List orders) {
        this.name = name;
        this.id = id;
        this.orders = orders;
    }

    public Customer() {

    }

    @Override
    public String toString() {
        return "Customer{" +
                "name='" + name + '\'' +
                ", id=" + id +
                ", orders=" + orders +
                '}';
    }
}

POJO <-> JSON String 변환 테스트

package jsonLab;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class Formatter {

    ObjectMapper objectMapper;
    Gson gson;


    public Formatter() {
        objectMapper = new ObjectMapper();
        gson = new Gson();
    }

    public void format_jackson(Object obj){
        System.out.println("== Jackson ==");
        try {
            String mappedValue = objectMapper.writeValueAsString(obj);
            System.out.println("toJson : " + mappedValue);

            // format to POJO
            Customer customer = objectMapper.readValue(mappedValue, Customer.class);
            System.out.println("fromJson : " + customer);

        } catch (JsonProcessingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void format_gson(Object obj){
        System.out.println("== Gson ==");
        String mappedValue = gson.toJson(obj);
        System.out.println("toJson : " + mappedValue);

        // format to POJO
        Customer customer = gson.fromJson(mappedValue, Customer.class);
        System.out.println("fromJson : " + customer);
    }

    public static void main(String args[]){
        Formatter formatter = new Formatter();

        Customer customer = new Customer();
        customer.setId(10);
        customer.setName("Gompang");

        List orderList = new ArrayList();
        orderList.add("order1");
        orderList.add("order2");
        orderList.add("order3");

        customer.setOrders(orderList);

        formatter.format_jackson(customer);
        formatter.format_gson(customer);
    }
}
profile
공유 문화를 지향하는 개발자입니다.

0개의 댓글