[DEV] 기록

[Java] json을 Java Object로 변환하는 방법

꾸준함. 2021. 2. 27. 23:18

개요

ElasticSearch를 호출하는 방식을 RestTemplate에서 RestClient로 변환하면서 json을 Java Class로 변환하는 방식을 적용했습니다.

이때, UnrecognizedPropertyException과 같은 에러가 발생하는 등 여러 시행착오를 거쳤기 때문에 해당 내용을 정리하고자 합니다.

 

본론

우선, 저는 jackson 라이브러리의 ObjectMapper 클래스를 통해 json을 Java Object로 변환했기 때문에 maven에 아래의 jackson 라이브러리를 추가해줘야 합니다.

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>최신 버전</version>
</dependency>

 

라이브러리를 추가한 뒤에는 아래와 같이 ObjectMapper의 readValue 메서드를 통해 json을 자바 오브젝트로 변환해주면 됩니다.

String json = [response로 받은 json 객체];
ObjectMapper objectMapper = new ObjectMapper();
ExampleClass exampleClass = objectMapper.readValue(json, ExampleClass.class);

 

* 주의: 이때, json 객체의 모든 key 값들과 클래스 내 필드가 모두 1:1 매칭이 안된다면 아래와 같이 UnrecognizedPropertyException이 발생합니다.

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "~~" (*.class), not marked as ignorable

 

이러한 익셉션이 발생하는 이유는 앞서 언급했듯이 json 객체의 key 값들과 클래스 내 필드들이 1:1 매칭이 안되기 때문에 발생하므로 필요 없는 속성은 무시한다는 어노테이션을 추가해줘야 합니다.

방법은 아래와 같이 @JsonIgnoreProperties 어노테이션을 추가해주면 됩니다.

@JsonIgnoreProperties(ignoreUnknown = true)
public class ExampleClass {
	// 중략
}

 

[출처]

www.baeldung.com/jackson-object-mapper-tutorial

반응형