2015-12-16 5 views
6

Ich sende/empfange eine benutzerdefinierte Klasse von einem Server zu Android, die Klasse ist als;Android mit MSGPack Core und Jackson Mapper - dekodieren Klassenvariable unbekannten Typs

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

    public String status; 
    public Value data; 

} 

Das Problem ist, dass ich immer den Fehler bekomme;

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"] 

Wenn ich die Variable „Daten“ ändern sagen MAP<String, String> data dann funktioniert es gut, jedoch ist es, Daten von einer unbekannten Art! (naja normalerweise HashMap oder ein Array vielleicht eine String, nicht irgendeine andere Klasse).

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

Wie kann ich einen unbekannten Typ angeben?

Antwort

2

Also änderte ich die Klasse zu;

public class myClass{ 

    public String status; 
    public Object data; 

} 

Und ich jetzt nur den Objekttyp testen. Ich bin mir nicht sicher, warum ich das vorher nicht versucht habe!

+0

Weil ich jetzt keine nette data.getInteger Funktion habe. –

+0

Ich wollte vorschlagen, dass du es gut gelöst hast –

1

org.msgpack.value.Value ist eine Schnittstelle.

Wenn Sie Werte mithilfe von ObjectMapper de-serialisieren, muss das Ziel eine Klasse mit Standardkonstruktor sein. Andernfalls kann OM kein Zielobjekt erstellen.

+0

Aber wenn ich nicht weiß, was "Daten" Typ sein wird, wie kann ich einen Konstruktor erstellen? –

Verwandte Themen