ObjectMapper


kafka로 message consume 후 Deserialization 수행시 ObjectMapper를 사용했는데요. 가끔 헷갈리는 부분이라 기록해 봅니다.

import com.fasterxml.jackson.databind.ObjectMapper;
....
@Autowired
private ObjectMapper objectMapper;
....
try {
    TestDTO dto = objectMapper.readValue(message, TestDTO .class);
} catch (IOException e) {
    log.error("exception occured.", e);
}

3번째 경우처럼 DTO에 적당한 필드가 없게되면 exception이 발생합니다.

// 정상처리
{"a": "aaa", "b": "bbb", "c": "ccc"}
 
public class TestDTO {
    private String a; // "aaa"
    private String b; // "bbb"
    private String c; // "ccc"
}
 
// 정상처리
{"a": "aaa"}
 
public class TestDTO {
    private String a; // "aaa"
    private String b; // null
    private String c; // null
}
 
// 오류 : com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "b"
{"a": "aaa", "b": "bbb", "c": "ccc", "d": "ddd"}
 
public class TestDTO {
    private String a;
    private String b;
    private String c;
}

objectMapper대신 gson 으로 교체하는 것도 좋은 방법으로 보입니다.
https://github.com/google/gson

또는 configure를 통해 오류가 발생하지 않도록 설정할 수 있습니다.

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

광고

댓글 남기기