なぜObjectMapperを使うのですか?
17716 ワード
ObjectMapperとは?
特定のオブジェクトをjsonに変換します.あるいは逆に、置換に使用します.
Springでは、オブジェクトはrequestBodyによってjsonに置き換えられて受信されます.ObjectMapperは単独では使用されません.
しかしJson自身のデータ制御の現状で使用できる.ObjectMapperを使用してjsonデータに直接アクセスする方法を学習します.
注意!
Springで使用しているobjectmapper dipandashは
Jackson Databind
です!スプリングにパンダをもう1匹掛ける必要はありません.
ObjectMapperの実装方法
オブジェクト>json
String 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()
// 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
クイックキャンパススプリング予測局講座
Reference
この問題について(なぜObjectMapperを使うのですか?), 我々は、より多くの情報をここで見つけました https://velog.io/@mooh2jj/ObjectMapper-왜-사용하는거야テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol