2015-12-16 16 views
6

Invio/ricezione di una classe personalizzata da un server ad Android, la classe è come;Android che utilizza MSGPack Core e Jackson Mapper - decodifica la variabile di classe di tipo sconosciuto

import org.msgpack.value.Value; 
public class myClass { 

    public String status; 
    public Value data; 

} 

Il problema è che ottengo sempre l'errore;

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: [email protected]; line: -1, column: 100] (through reference chain:xxx.xxxxxxxxxx.xxx.xxxxxx.myClass["data"] 

Se cambio la variabile "dati" a dire MAP<String, String> data allora funziona bene, però, i dati sono di un tipo sconosciuto! (beh normalmente HashMap o Array possono essere una stringa, non un'altra classe).

MessagePackFactory factory = new MessagePackFactory(); 
ObjectMapper mapper = new ObjectMapper(factory); 
myClass response = mapper.readValue(inputStream, myClass.class); 

Come specificare un tipo sconosciuto?

risposta

2

Così ho cambiato la classe;

public class myClass{ 

    public String status; 
    public Object data; 

} 

E ora testo solo il tipo di oggetto. Non sono sicuro del perché non l'ho provato prima!

+0

Perché ora non ho una bella funzione data.getInteger. –

+0

Stavo per suggerire che, buono hai risolto –

1

org.msgpack.value.Value è un'interfaccia.

Quando si declassificano i valori utilizzando ObjectMapper, la destinazione deve essere una classe con costruttore predefinito. L'altro saggio OM non può creare un oggetto obiettivo.

+0

Ma se non so che tipo di "dati" sarà come posso creare un Costruttore? –