2015-12-16 5 views
6

私はサーバーからAndroidにカスタムクラスを送受信していますが、クラスはasです。MSGPack CoreとJackson Mapperを使用しているAndroid - 不明な型のクラス変数をデコード

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

    public String status; 
    public Value data; 

} 

問題は常にエラーが発生することです。

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

私はそれが正常に動作しますMAP<String, String> dataを言うために、変数「データ」を変更する場合は、しかし、データが未知の型であります! (通常、HashMapやArrayは他のクラスではなくStringでも構いません)。

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

どのようにして不明なタイプを指定できますか?

答えて

2

私はクラスを次のように変更しました。

public class myClass{ 

    public String status; 
    public Object data; 

} 

これでオブジェクトタイプをテストしました。なぜ私はこれを前に試していないのか分かりません!

+0

これでいいdata.getInteger関数がないためです。 –

+0

私は、あなたがそれを解決したことをお勧めしたいと思っていた –

1

org.msgpack.value.Valueはインターフェイスです。

ObjectMapperを使用して値を逆シリアル化する場合、ターゲットはDefault Constructorを持つクラスである必要があります。他の賢明なOMはターゲットオブジェクトを作成できません。

+0

しかし、私はどのような "データ"型がどのようにコンストラクタを作成できますか分からないのですか? –

関連する問題