개요
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 {
// 중략
}
[출처]
반응형
'[DEV] 기록' 카테고리의 다른 글
[Spring] Maven 정리 (0) | 2021.03.03 |
---|---|
Intellij IDEA(인텔리제이) 단축키 정리 (1) | 2021.03.02 |
[SpringBoot] 디버깅 목적으로 자바 객체 출력하는 방법 (0) | 2021.02.21 |
[RestTemplate] "[circuit_breaking_exception][parent]" Data too large, data for "[<http_request>]" would be error (0) | 2021.02.21 |
[elastic search] document 10,000개 이상 검색 하는 방법 (1) | 2021.02.05 |