Десериализация Джексона с общими аргументами ⇐ JAVA
Десериализация Джексона с общими аргументами
работал с десериализацией Джексона и пытался найти способ не передавать класс явно для десериализации. Вот что у меня есть:
public T deserialize(String json) { вар картограф = новый ObjectMapper(); вар typeReference = новый TypeReference(){}; return mapper.readValue(json, typeReference); } // код вызова var someJson = {\"SomeKey\": \"SomeValue\"} Модель MyModel = deserialize(someJson); с помощью приведенного выше кода я получаю ClassCastException, сообщающий:
этот класс java.util.LinkedHashMap нельзя привести к классу com.personal.carrot.MyModel.
Теперь я знаю, что мы можем заставить его работать, передав модель в качестве аргумента методу:
public T deserialize(String json, TypeReference typeReference) { вар картограф = новый ObjectMapper(); return mapper.readValue(json, typeReference); } // код вызова var someJson = {\"SomeKey\": \"SomeValue\"} вар typeRef = новый TypeReference(){}; Модель MyModel = deserialize(someJson, typeRef); Из сообщения stackoverflow я понимаю, что он принимает LinkedHashMap в качестве типа по умолчанию, поскольку T будет означать, что T расширяет Object>.
Есть ли способ получить десериализацию без явной передачи new TypeReference(){} или MyModel.class?
работал с десериализацией Джексона и пытался найти способ не передавать класс явно для десериализации. Вот что у меня есть:
public T deserialize(String json) { вар картограф = новый ObjectMapper(); вар typeReference = новый TypeReference(){}; return mapper.readValue(json, typeReference); } // код вызова var someJson = {\"SomeKey\": \"SomeValue\"} Модель MyModel = deserialize(someJson); с помощью приведенного выше кода я получаю ClassCastException, сообщающий:
этот класс java.util.LinkedHashMap нельзя привести к классу com.personal.carrot.MyModel.
Теперь я знаю, что мы можем заставить его работать, передав модель в качестве аргумента методу:
public T deserialize(String json, TypeReference typeReference) { вар картограф = новый ObjectMapper(); return mapper.readValue(json, typeReference); } // код вызова var someJson = {\"SomeKey\": \"SomeValue\"} вар typeRef = новый TypeReference(){}; Модель MyModel = deserialize(someJson, typeRef); Из сообщения stackoverflow я понимаю, что он принимает LinkedHashMap в качестве типа по умолчанию, поскольку T будет означать, что T расширяет Object>.
Есть ли способ получить десериализацию без явной передачи new TypeReference(){} или MyModel.class?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Десериализация Джексона: считать определенные строковые значения нулевыми.
Anonymous » » в форуме JAVA - 0 Ответы
- 20 Просмотры
-
Последнее сообщение Anonymous
-