Обобщение Java: преобразователь объектов Преобразование JSON в объект Java - PullRequest
0 голосов
/ 15 февраля 2019

Я бы хотел десериализовать строку json в объект java.Я хотел написать универсальный метод.

public class ObjectSerializer<T> {

    T t;
    private ObjectMapper mapper = new ObjectMapper();


  /*  public Person deSerial(String json) throws Exception {
        TypeReference<Person> typeRef = new TypeReference<Person>() {};

        return mapper.readValue(json, typeRef);
    } */

    public T deSerialize(String jsonInput) throws Exception {
        TypeReference<T> typeRef
                = new TypeReference<T>() {};

       return mapper.readValue(jsonInput, typeRef);
    }
}

Когда я вызываю deSerialize(validPersonJsonString) [validPersonJsonString : valid person JSON String], он не работает, он выдает мне ошибку:

java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.example.Person.

Тогда как при вызовепрокомментированный deSerial метод, он отлично работает.Пожалуйста, объясните проблему.

Спасибо.

1 Ответ

0 голосов
/ 15 февраля 2019

Джексон не поддерживает TypeReference с параметрами общего типа из-за стирания типа. Вот ошибка об этом.

Что касается вашего варианта использования, вам вообще не нужно использовать ObjectSerializer класс.Вы можете напрямую выставить объект ObjectMapper на свой сервисный уровень и выполнить десериализацию.

Если вы хотите экранировать механизм сериализации json от своего сервисного уровня, тогда вы можете заключить реализацию ObjectMapper в другой класс (как вы это сделали в своем коде), но затем примите тип класса в качестве аргумента метода, а не универсальный тип.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...