ObjectMapper
의 readValue(InputStream in, Class<T> valueType)
기능에는 Class가 필요합니다. 그러나 내부적으로 전달하는 클래스가 일부 인터페이스를 데이터 멤버로 사용하는 경우 어떻게 사용합니까?
Jackson이 전달 된 클래스의 내부 인터페이스의 구체적인 클래스를 얻지 못하기 때문에이 예외의 원인을 이해할 수 있지만 내 질문은 어떻게 해결할 수 있습니까? 그런 다음 어떻게 deserialize합니까? 역 직렬화하려는 클래스는 다음과 같습니다.
class BaseMetricImpl<N> implements Metric<N> {
protected MetricValueDescriptor descriptor;
}
다음 MetricValueDescriptor
은 인터페이스이므로 다음과 같은 오류가 발생합니다.-
com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of MetricValueDescriptor, problem: abstract types either need to be mapped to concrete types, have custom deserializer, or be instantiated with additional type information
at [Source: java.io.ByteArrayInputStream@2ede2c9f; line: 1, column: 2] (through reference chain: SingleValueMetricImpl["descriptor"])
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:164)
at com.fasterxml.jackson.databind.DeserializationContext.instantiationException(DeserializationContext.java:624)
at com.fasterxml.jackson.databind.deser.AbstractDeserializer.deserialize(AbstractDeserializer.java:115)
at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:375)
at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:98)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:308)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:121)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2793)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:1989)