[Java] Jackson을 활용한 데이터 변환(Json to Java Object)
2022. 8. 31. 16:34ㆍWeb/JAVA
1. ObjectMapper
- JSON 컨텐츠를 Java 객체로 deserialization 하거나 Java 객체를 JSON으로 serialization 할 때
사용하는 Jackson 라이브러리의 클래스이다.
- ObjectMapper는 생성 비용이 비싸기 때문에 bean/static으로 처리하는 것이 좋다.
2. 사용방법
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.0</version>
</dependency>
- 먼저 Jackson 라이브러리를 추가하여 다운받아준다.
- 기본적인 사용방법을 우선 적어보려고 한다.
- 보통 ObjectMapper 사용할때마다 생성하기 보다 static으로 선언을 해놓고 사용하는 것이 성능상 좋다.
private static final ObjectMapper mapper = new ObjectMapper()
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
Configuring Serialization or Deserialization Feature
- static으로 선언할 경우 옵션을 정하여 오류를 방지 할 수 있다.
- JSON에는 있지만 Mapping될 Object에는 없는 필드를 무시해야하는 경우
String json = "{\"name\":\"Ryan\",\"age\":30,\"sex\":\"M\"}";
// User Object에서는 "sex" field가 없습니다. 아래 설정을 안하게되면 익셉션이 발생합니다.
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
User user = objectMapper.readValue(json, User.class);
- JSON에 있는 propety가 Mapping될 Object에 primitive인데 null 값이 전달을 무시해야하는 경우
String json = "{\"name\":\"Ryan\",\"age\":null}";
// 기본적으로 FAIL_ON_NULL_FOR_PRIMITIVES 옵션은 false 상태입니다. 의도적으로 옵션을 설정해주었습니다.
// 옵션이 true가 되게되면, age가 int인 primitive 자료형이 null인 JSON이 전달되는 경우 익셉션을 발생합니다.
objectMapper.configure(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES, false);
User user = objectMapper.readValue(json, User.class);
Json -> Java Object
// 카프카에서 받은 메시지 파싱
SmartStoreProductListInfo smartStoreProductListInfo = mapper.readValue(topicMessage, SmartStoreProductListInfo.class);
- readValue(Json, JavaObject) 를 통해서 선언한 Json을 선언한 JavaObject 로 Deserialization 할 수 있다.
Java Object -> Json
ObjectMapper objectMapper = new ObjectMapper();
User user = new User("Ryan", 30);
objectMapper.writeValue(new File("user.json"), user);
// 파일 출력: user.json
{"name":"Ryan","age":30}
// 문자열 출력
String userAsString = objectMapper.writeValueAsString(user);
{"name":"Ryan","age":30}
- writeValueAsString(JavaObject) 를 통해서 선언한 JavaObject를 Json으로 Serialization 할 수 있다.
JSON Array String -> Java List
String jsonArr = "[{\"name\":\"Ryan\",\"age\":30},{\"name\":\"Jake\",\"age\":20}]";
List<User> users = objectMapper.readValue(jsonArr, new TypeReference<>() {});
JSON String -> Java Map
String jsonArr = "{\"name\":\"Ryan\",\"age\":30}";
Map<String, Object> user = objectMapper.readValue(jsonArr, new TypeReference<>() {});
'Web > JAVA' 카테고리의 다른 글
[JPA] Hibernate5 네이밍 룰 변경해서 적용하기(Camel -> Snake) (0) | 2022.11.18 |
---|---|
[JAVA] Enum 사용하여 DB에 값 저장하고 조회하기 (0) | 2022.11.18 |
[JAVA] 자주 사용하는 Lombok 어노테이션 (0) | 2022.08.10 |
[JAVA] DTO, VO 그리고 Entity의 차이 (0) | 2022.08.10 |
[JAVA] JAVA 8 함수형 인터페이스 (0) | 2022.07.31 |