ObjectMapper란? ● Java 객체를 Json으로 직렬화 하거나 또는 Json 데이터를 Java 객체에 역직렬화 하는 기능을 수행하는 클래스 ● 최근 API 서비스가 아니더라도 복잡한 구조의 데이터를 쉽게 서로 주고 받을 수 있게 하기 위해 View 영역과 백엔드가 통신을 할 때 Json을 많이 이용하기 때문에 많이 사용하게 된 클래스
설치 방법 <!-- Spring Framework의 경우 -->
<dependency>
<groupId> com.fasterxml.jackson.core</groupId>
<artifactId> jackson-databind</artifactId>
<version> 2.15.2</version>
</dependency>
<!-- Spring Boot의 경우 -->
<dependency>
<groupId> org.springframework.boot</groupId>
<artifactId> spring-boot-starter-web</artifactId>
<version> 3.2.0</version>
</dependency>
implementation 'org.springframework.boot:spring-boot-starter-web:3.2.0'
Java Object → Json ObjectMapper objectMapper = new ObjectMapper ();
UserVO user =
UserVO
. builder ()
. name ( "HongGilDong" )
. age ( 25 )
. email ( "hong@naver.com" )
. birthday ( "19970229" )
. phoneNumber ( "0001112222" )
. build ();
String javaObjectToJson = objectMapper . writeValueAsString ( user );
Json → Java Object ObjectMapper objectMapper = new ObjectMapper ();
String jsonString =
"{\"name\":\"jsonString\",\"age\":25,\"email\":\"jsonString@naver.com\",\"phoneNumber\":\"0001112222\",\"birthday\":\"19970229\"}" ;
UserVO jsonToJavaObject = objectMapper . readValue ( jsonString , UserVO . class );
JSON 배열을 Java List에 매핑하기 ObjectMapper objectMapper = new ObjectMapper ();
String jsonStringA = "{\"name\":\"jsonStringA\",\"age\":25,\"email\":\"jsonStringA@naver.com\",\"phoneNumber\":\"0001112222\",\"birthday\":\"19970229\"}" ;
String jsonStringB = "{\"name\":\"jsonStringB\",\"age\":25,\"email\":\"jsonStringB@naver.com\",\"phoneNumber\":\"0001112222\",\"birthday\":\"19970229\"}" ;
String jsonArray = "[" + jsonStringA + "," + jsonStringB + "]" ;
List < UserVO > users = objectMapper . readValue ( jsonArray , new TypeReference < List < UserVO >>(){});
JSON 데이터를 Map에 매핑하기 ObjectMapper objectMapper = new ObjectMapper ();
String jsonStringForMap = "{\"name\":\"jsonStringForMap\",\"age\":25,\"email\":\"jsonStringForMap@naver.com\",\"phoneNumber\":\"0001112222\",\"birthday\":\"19970229\"}" ;
HashMap < String , Object > map = objectMapper . readValue ( jsonStringForMap , new TypeReference < HashMap < String , Object >>(){});
@Builder 어노테이션을 사용하는 경우의 VO @Getter
@Setter
@Builder ( builderClassName = "UserVOBuilder" , toBuilder = true )
@JsonDeserialize ( builder = UserVO . UserVOBuilder . class )
public class UserVO {
private String name ; //이름
private int age ; //나이
private String email ; //이메일
private String phoneNumber ; //핸드폰번호
private String birthday ; //생년월일
@JsonPOJOBuilder ( withPrefix = "" ) public static class UserVOBuilder {
}
}
역직렬화 실행시 존재하지 않는 필드 무시 설정 // 없는 필드로 인한 오류 무시
objectMapper . configure ( DeserializationFeature . FAIL_ON_UNKNOWN_PROPERTIES , false );