📝 Json - ObjectMapper 로 Serialize, Deserialize

개발을 하다보면 JSON을 많이 사용하게 된다. Class 의 Instance 를 Json 으로 바꿀 상황도 많고, Json 을 Instance 로 바꾸는 상황도 많은데. 이것을 간편하게 ObjectMapper 를 이용하여 처리할 수 있다. Spring Boot 시절에 아닐 때는 Pom.xml 에서 Jackson Repository 를 추가해줘야만 사용할 수 있었으나, 요즘에는 기본적으로 들어있으므로 그냥 사용이 가능하다.
Spring Component 에서 생성자 주입 또는 @Autowired Annotation 을 이용하면 간단히 ObjectMapper 를 사용할 수 있고, 아니면 그냥 Instance 화 시켜서 사용해도 된다.




🚩 Json - ObjectMapper 로 Serialize

📝 Source Code

  • Person Class Example
@Data
public class Person {
	private String name;
    private Sex sex;
    private String phoneNumber;
    ...
}
  • Object Mapper Using Example
Person person = new Person();
person.setName("홍길동");
person.setSex(Sex.Male);
person.setPhoneNumber("01012341234");

ObjectMapper objectMapper = new ObjectMapper();
String result = objectMapper.writeValueAsString(person);

System.out.println(result);

// 출력
// Person : { name : "홍길동", sex : "Male", phoneNumber : "01012341234" }

🚩 Json - ObjectMapper 로 Deserialize

📝 Source Code

  • Person Class Example
@Data
public class Person {
	private String name;
    private Sex sex;
    private String phoneNumber;
    ...
}
  • Object Mapper Using Example
String inputData = "{ name : "홍길동", sex : "Male", phoneNumber : "01012341234" }"

ObjectMapper objectMapper = new ObjectMapper();
Person person = objectMapper.readValue(inputData, Person.class);

System.out.println(person.toString());

// 출력
// Person : { name : "홍길동", sex : "Male", phoneNumber : "01012341234" }

🔨 FAIL_ON_UNKNOWN_PROPERTIES 옵션 ?

ObjectMapper 로 Deserialize 를 진행하는 경우 Json 데이터와 Class 가 정확하게 일치 하지 않으면 데이터 변환이 이루어지지 않는 경우가 있다.
정확히는 Json 데이터의 Field 의 내용은 전부다 가지고 있지만 추가로 다른 Field 를 가지고 있는 경우는 Exception 이 발생하지 않지만, Json 데이터의 Field 를 Class 가 가지고 있지 않은 경우에는 JsonProcessingException 이 발생한다.
이러한 Exception 을 방지시키기 위해서 FAIL_ON_UNKNOWN_PROPERTIES 을 사용한다.

📝 Source Code

  • IncompletePerson Class Example
@Data
public class IncompletePerson {
	private String name;
    private Sex sex;
    ...
}
  • Object Mapper Using Example
String inputData = "{ name : "홍길동", sex : "Male", phoneNumber : "01012341234" }"

ObjectMapper objectMapper = new ObjectMapper();
// 해당 옵션을 설정하지 않으면 Json 데이터의 Field 중에서 Class 의 Field 와 일치하지 않는 Field 가 있기 떄문에 JsonProcessingException 발생
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
IncompletePerson person = objectMapper.readValue(inputData, IncompletePerson.class);

System.out.println(person.toString());

// 출력
// Person : { name : "홍길동", sex : "Male"}


📌 마무리

Json 많이 쓰는데 알아두면 좋다.

profile
알고 있는 것을 정리하고, 새로운 것을 알기위해 끄적이는곳..

0개의 댓글

Powered by GraphCDN, the GraphQL CDN