I am sending/receiving a custom class from a server to Android, the class is as;
import org.msgpack.value.Value;
public class myClass {
public String status;
public Value data;
}
The problem is that I always get the error;
com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of org.msgpack.value.Value, 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.BufferedInputStream@f478759; line: -1, column: 100] (through reference chain:xxx.xxxxxxxxxx.xxx.xxxxxx.myClass["data"]
If I change the variable "data" to say MAP<String, String> data
then it works fine, however, data is of an unknown type! (well normally HashMap or an Array maybe a String, not some other class).
MessagePackFactory factory = new MessagePackFactory();
ObjectMapper mapper = new ObjectMapper(factory);
myClass response = mapper.readValue(inputStream, myClass.class);
How can I specify an unknown type?
So I changed the class to;
public class myClass{
public String status;
public Object data;
}
And I now just test the Object type. I am not sure why I did not try this before!
org.msgpack.value.Value is an interface.
When you are de-serializing values using ObjectMapper, the target must be a Class with Default Constructor. Other wise OM cannot create a target Object.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With