ResultMaterializer.java
package io.github.pojotools.flat2pojo.core.impl;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import io.github.pojotools.flat2pojo.core.api.Flat2PojoException;
/**
* Converts JSON tree structure to typed POJOs. Single Responsibility: JSON-to-POJO materialization
* only.
*/
final class ResultMaterializer {
private final ObjectMapper objectMapper;
ResultMaterializer(final ObjectMapper objectMapper) {
this.objectMapper = objectMapper;
}
<T> T materialize(final ObjectNode root, final Class<T> type) {
try {
if (JsonNode.class.isAssignableFrom(type)) {
@SuppressWarnings("unchecked")
final T cast = (T) root;
return cast;
} else {
return objectMapper.treeToValue(root, type);
}
} catch (final Exception exception) {
throw new Flat2PojoException("Failed to map result to " + type.getName(), exception);
}
}
}