스프링부트 기본 4. Object Mapper

min seung moon·2021년 6월 27일
0

Spring

목록 보기
30/50

1. Object Mapper

2. 프로젝트 테스트

  • Json Node에 접근하여 제어해보기
  • Java Proejct로 만드는 대신 Gradle Proejct로 생성(object_mapper)

01. Jackson Databind dependencies에 추가

  • Object Mapper 사용을 위한 라이브러리 디펜던시에 추가

02. 테스트


03. 기본적인 JSON 처리

  • Package : dto
  • Class : User, Car
  • Car.java
package dto;

import com.fasterxml.jackson.annotation.JsonProperty;

public class Car {
    private String name;
    @JsonProperty("car_number")
    private String carNumber;
    @JsonProperty("TYPE")
    private String type;

    public String getName() {
        return name;
    }

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

    public String getCarNumber() {
        return carNumber;
    }

    public void setCarNumber(String carNumber) {
        this.carNumber = carNumber;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    @Override
    public String toString() {
        return "Car{" +
                "name='" + name + '\'' +
                ", carNumber='" + carNumber + '\'' +
                ", type='" + type + '\'' +
                '}';
    }
}
  • User.java
package dto;

import java.util.List;

public class User {
    private String name;
    private Integer age;
    private List<Car> cars;

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public List<Car> getCars() {
        return cars;
    }

    public void setCars(List<Car> cars) {
        this.cars = cars;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", cars=" + cars +
                '}';
    }
}
  • Main.java
    • List<Car> carList = Arrays.asList(car1, car2);
      • Arrays.asList()를 활용해서 List에 데이터 삽입
    • String json = objectMapper.writeValueAsString(user);
      • objectMapper.writeValueAsString()를 활용하여 JSON 형태로 변환
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import dto.Car;
import dto.User;

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

public class Main {

    public static void main(String[] args) throws JsonProcessingException {
        System.out.println("main");

        ObjectMapper objectMapper = new ObjectMapper();

        User user = new User();
        user.setName("홍길동");
        user.setAge(20);

        Car car1 = new Car();
        car1.setName("K5");
        car1.setCarNumber("11가 1111");
        car1.setType("sedan");

        Car car2 = new Car();
        car2.setName("Q5");
        car2.setCarNumber("22가 2222");
        car2.setType("SUV");

        List<Car> carList = Arrays.asList(car1, car2);

        user.setCars(carList);

        System.out.println(user);

        String json = objectMapper.writeValueAsString(user);
        System.out.println(json);
    }
}



04. JSON NODE 접근

  • Main.java
    • JsonNode 객체에서는 특정 값을 변경하지 못하도록 막아 놓았다 그렇기에 ObjectNode를 활용
    • JsonNode jsonNode = objectMapper.readTree(json);
      • JsonNode 형태로 데이터 변환
      • jsonNode.get("name").asType()으로 특정 노드의 데이터 갖고오기
    • ArrayNode arrayNode = (ArrayNode)cars;
      • 배열 데이터는 ArrayNode로 강제 형변환 후 사용
    • List<Car> _cars = objectMapper.convertValue(arrayNode, new TypeReference<List<Car>>() {});
      • 원하는 타입으로 변경하기 위해서는 .convertValue() 활용
    • ObjectNode objectNode = (ObjectNode) jsonNode;
      • 데이터 값 변경을 위해서 ObjectNode로 형 변환
      • objectNode.put() 메서드로 데이터 값 변경
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
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 dto.Car;
import dto.User;

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

public class Main {

    public static void main(String[] args) throws JsonProcessingException {
        System.out.println("main");

        ObjectMapper objectMapper = new ObjectMapper();

        User user = new User();
        user.setName("홍길동");
        user.setAge(20);

        Car car1 = new Car();
        car1.setName("K5");
        car1.setCarNumber("11가 1111");
        car1.setType("sedan");

        Car car2 = new Car();
        car2.setName("Q5");
        car2.setCarNumber("22가 2222");
        car2.setType("SUV");

        List<Car> carList = Arrays.asList(car1, car2);

        user.setCars(carList);

        System.out.println(user);

        String json = objectMapper.writeValueAsString(user);
        System.out.println(json);

        JsonNode jsonNode = objectMapper.readTree(json);
        String _name = jsonNode.get("name").asText();
        int _age = jsonNode.get("age").asInt();
        System.out.println("name : "+_name);
        System.out.println("age : "+_age);

        JsonNode cars = jsonNode.get("cars");
        ArrayNode arrayNode = (ArrayNode)cars;
        List<Car> _cars = objectMapper.convertValue(arrayNode, new TypeReference<List<Car>>() {});
        System.out.println(_cars);

        // JsonNode 객체에서는 특정 값을 변경하지 못하도록 막아 놓았다
        // 그렇기에 ObjectNode를 활용
        ObjectNode objectNode = (ObjectNode) jsonNode;
        objectNode.put("name", "steve");
        objectNode.put("age", 21);
        System.out.println(objectNode.toString());

    }
}

profile
아직까지는 코린이!

0개의 댓글