なぜObjectMapperを使うのですか?


ObjectMapperとは?


特定のオブジェクトをjsonに変換します.あるいは逆に、置換に使用します.
Springでは、オブジェクトはrequestBodyによってjsonに置き換えられて受信されます.ObjectMapperは単独では使用されません.
しかしJson自身のデータ制御の現状で使用できる.ObjectMapperを使用してjsonデータに直接アクセスする方法を学習します.
注意!
Springで使用しているobjectmapper dipandashはJackson Databindです!
スプリングにパンダをもう1匹掛ける必要はありません.

ObjectMapperの実装方法

  • ObjectMapperを使用して
  • にアクセス
    オブジェクト>jsonString json = objectMapper.writeValueAsString(user);sample.json
    {
      "name": [
        "dsg22",
        "dsg333"
      ],
      "age": 15,
      "cars": [
        {
          "name": "K5",
          "carNumber": "11rk 1111",
          "type": "sedan"
        },
        {
          "name": "Q5",
          "carNumber": "22rk 2222",
          "type": "SUV"
        }
      ]
    }
    User.java
    @Data
    @NoArgsConstructor
    public class User {
    
        private String name;
        private int age;
        private List<Car> cars;
    
    
        public User(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public User(String name, int age, List<Car> cars) {
            this.name = name;
            this.age = age;
            this.cars = cars;
        }
    
    }
    Car.java
    カメルボックスを@JsonPropertyで置き換える->スネイ寸法法
    @Data
    public class Car {
        private String name;
    
        @JsonProperty("car_number")
        private String carNumber;
    
        @JsonProperty("TYPE")
        private String type;
    }
    main
            System.out.println("main##########");
    
            ObjectMapper objectMapper = new ObjectMapper();
    
            User user = new User();
            user.setAge(15);
    
            Car car1 = new Car();
            car1.setName("K5");
            car1.setCarNumber("11rk 1111");
            car1.setType("sedan");
    
    
            Car car2 = new Car();
            car2.setName("Q5");
            car2.setCarNumber("22rk 2222");
            car2.setType("SUV");
    
            List<Car> carList = Arrays.asList(car1, car2);
            user.setCars(carList);
    
            System.out.println(user);
    
            // 1) object -> json
            String json = objectMapper.writeValueAsString(user);
    
            System.out.println("json: " + json);
    結果

    JsonNodeの実装方法


  • 方法JsonNode jsonNode = objectMapper.readTree(json); JsonNode cars = jsonNode.get("cars"); ArrayNode arrayNode = (ArrayNode) cars;

  • Jsonデータを変更するには、次の手順に従います.ObjectNode objectNode = (ObjectNode) jsonNode;put()に変更objectNode.put("name", "steve"); objectNode.put("age", 24);

  • JsonデータのチェックobjectNode.toPrettyString()
  • main
    // 2) JsonNode로 접근하기!
            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");   // String으로 못받음!
            ArrayNode arrayNode = (ArrayNode) cars; // Array 타입으로 파싱
    
            List<Car> _cars = objectMapper.convertValue(arrayNode, new TypeReference<List<Car>>() {
            });     // List타입으로 convert
            System.out.println("_cars :" + _cars);
    
            // JsonNode를 쓰는 이유! 이렇게 변경이 가능!
            ObjectNode objectNode = (ObjectNode) jsonNode;
            objectNode.put("name", "steve");
            objectNode.put("age", 24);
    
            System.out.println("objectNode: " + objectNode.toPrettyString());
    console
    _cars :[Car(name=K5, carNumber=11rk 1111, type=sedan), Car(name=Q5, carNumber=22rk 2222, type=SUV)]
    objectNode: {
      "name" : "steve",
      "age" : 24,
      "cars" : [ {
        "name" : "K5",
        "car_number" : "11rk 1111",
        "TYPE" : "sedan"
      }, {
        "name" : "Q5",
        "car_number" : "22rk 2222",
        "TYPE" : "SUV"
      } ]
    }
    

    リファレンス


    ソース:https://github.com/mooh2jj/objectMapperTest.git
    クイックキャンパススプリング予測局講座