2015-01-14 2 views
0

У меня есть веб-приложение Java с несколькими веб-модулями. Один будет действовать как сервер, а другой модуль действует как клиент, оба развернуты на разных серверах. Клиентское приложение будет вызывать серверное приложение через службу отдыха, чтобы получать и сохранять данные. С сервера я получаю строку JSON, и я пытаюсь преобразовать ее в объект с типами Generic.Jackson with Generics JSON Не удается создать экземпляр java.lang.Class

Вот мой объект

public class MyObject<T> { 

    private String name; 
    private List<T> list; 

    private final Class<T> referenceType; 

    @JsonCreator 
    public MyObject(@JsonProperty("referenceType") Class<T> referenceType) { 
     this.referenceType = referenceType; 
     list = new ArrayList<T>(); 
    } 

    public Class<T> getReferenceType() { 
     return this.referenceType; 
    } 

//getter and setter 
} 

На сервере я устанавливаю объект следующим образом

public String getAll(Long key) { 
    List<SomeObject> list = someObjectDao.getAll(key); 
    MyObject<SomeObject> myObject = new MyObject<SomeObject>(
        SomeObject.class); 
    appObject.setList(list); 
    JSONObject jsonget = new JSONObject(myObject); 
    return jsonget.toString(); 
} 

В приложении клиента, я получаю строку JSON, как этот

{"name":"someName","referenceType":"class com.pkg.model.SomeObject","list":[{list - index - 0},{list - index-1}]} 

И я пытаюсь преобразовать строку в MyObject введите следующий путь

private MyObject readJson(String output) throws Exception { 
     return new ObjectMapper().readValue(output, 
        new TypeReference<MyObject>() { 
        }); 
    } 

Но я получаю следующее исключение,

Can not construct instance of java.lang.Class, problem: class com.pkg.model.SomeObject 
at [Source: [email protected]; line: 1, column: 151] 

Как я могу преобразовать строку JSON объекта?

Спасибо.

ответ

1

Вашей сторона клиента в порядке, JSON вы читаете в не действует

следующий будет десериализацией правильно

"referenceType":"com.pkg.model.SomeObject" 

, чем вы будете застряли со списком частью.

Настройка серверной стороны для использования джексона, например.

return new ObjectMapper().writeValueAsString(myObject); 

бы устранить проблему

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