2015-12-16 1 views
6

Я отправляю/получаю пользовательский класс с сервера на Android, класс такой же;Android с использованием MSGPack Core и Jackson Mapper - переменная класса декодирования неизвестного типа

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, целью должен быть класс с конструктором по умолчанию. Другой мудрый ОМ не может создать целевой объект.

+0

Но если я не знаю, какой тип данных будет, как я могу создать конструктор? –

 Смежные вопросы

  • Нет связанных вопросов^_^