Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android using MSGPack Core and Jackson Mapper - decode class variable of unknown type

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?

like image 430
Recycled Steel Avatar asked Dec 16 '15 16:12

Recycled Steel


2 Answers

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!

like image 184
Recycled Steel Avatar answered Oct 20 '22 11:10

Recycled Steel


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.

like image 25
Srikanth K. Avatar answered Oct 20 '22 10:10

Srikanth K.