📌 해당 글은 필자가 개인공부한 글입니다. 저작권 및 내용에 문제가 있으면 댓글남겨주세요!
이번 시간에는 Spring에서 사용되는 ObjectMapper 동작 방식에 대해 정리 해보겠다.
객체 -> Json문자열

writeValueAsString(value) : value(String 타입으로 변환할 대상)
map 타입 -> JSON 형식의 문자열로으로 변환해보자.
[map]
public class Json1 {
public static void main(String[] args){
ObjectMapper mapper = new ObjectMapper();
Map<String,String> map = new HashMap<>();
map.put("name","jihwan");
map.put("age","28");
map.put("email","ohjihwan123@naver.com");
System.out.println("map =>"+ map);
System.out.println("================");
try {
String jsonStr = mapper.writeValueAsString(map);
System.out.println("jsonStr =>" + jsonStr);
}catch(Exception e) {
e.printStackTrace();
}
}
}
map => {name=jihwan, age=28, email=ohjihwan123@naver.com}
================================================================
jsonStr => {"name":"jihwan","age":"28","email":"ohjihwan123@naver.com"}
map에 담은 값 -> Json 문자열로 변환했다.
[리스트 직렬화]
public class ListJson {
public static void main(String[] args) {
ObjectMapper mapper = new ObjectMapper();
List<String> list = Arrays.asList("jihwan","dydgus","wltn"); // asList를 사용하면 얕은복사로 복사된다.
try {
String jsonStr = mapper.writeValueAsString(list);
System.out.println(jsonStr);
}
catch(Exception e) {
e.printStackTrace();
}
}
}
[복잡한 데이터 구조 직렬화]
public class difficultList {
public static void main(String[] args) {
ObjectMapper mapper = new ObjectMapper();
Map<String,Object> complexmap = new HashMap<>();
complexmap.put("name", "jihwan");
complexmap.put("age", 28);
complexmap.put("email", "ohjihwan123@naver.com");
complexmap.put("hobbies", List.of("reading","travel","swimming"));
try {
String jsonStr = mapper.writeValueAsString(complexmap);
System.out.println(jsonStr);
//{"hobbies":["reading","travel","swimming"],"name":"jihwan","age":28,"email":"ohjihwan123@naver.com"}
}catch(Exception e){
e.printStackTrace();
}
}
}
Json 문자열 -> 객체를 만들어냄.

readValue(arg,type)
- arg : 지정된 타입으로 변환할 대상
- type : 대상을 어떤 타입으로 변환할 것인지 클래스를 명시
(Class객체/TypeReference객체가 올 수 있음)
[예시]
mapper.readValue(arg, ArrayList.class);
mapper.readValue(arg, new ArrayList<HashMap<String,String>>().getClass());
mapper.readValue(arg, new TypeReference<ArrayList<HashMap<String,String>>>(){});
Json 문자열을 ---> 맵 타입으로 변환해보자.
[JSON -> Map]
public class jsonMap {
public static void main(String[] args) {
ObjectMapper mapper = new ObjectMapper();
Map<String,String> map = new HashMap<>();
String json = "{\"name\":\"ohjihwan\",\"age\":28,\"gender\":\"M\"}";
try{
map = mapper.readValue(json,
new TypeReference<HashMap<String, String>>() {});
System.out.println(map);
// {gender=M, name=ohjihwan, age=28}
}
catch(Exception e){
e.printStackTrace();
}
}
}
[List]
public class listMapchange {
public static void main(String[] args) {
// Object -> Json으로 변환
try{
ObjectMapper mapper = new ObjectMapper();
ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>();
HashMap<String,String> map = new HashMap<>();
map.put("name","jihwan");
map.put("age", "28");
map.put("email","ohjihwan123@naver.com");
list.add(map);
map = new HashMap<>();
map.put("name","dydgus");
map.put("age", "27");
map.put("email","ohjihwan@naver.com");
list.add(map);
System.out.println(mapper.writeValueAsString(list));
// [{"name":"jihwan","age":"28","email":"ohjihwan123@naver.com"},{"name":"dydgus","age":"27","email":"ohjihwan@naver.com"}]
// Json -> Object
String jsonStr = mapper.writeValueAsString(list);
list = mapper.readValue(jsonStr, new TypeReference<ArrayList<HashMap<String,String>>>() {});
System.out.println(list);
// [{name=jihwan, age=28, email=ohjihwan123@naver.com}, {name=dydgus, age=27, email=ohjihwan@naver.com}]
}
catch(Exception e) {
e.printStackTrace();
}
}
}