У мене є клас Java, MyPojo
який я зацікавлений у десеріалізації з JSON. Я налаштував спеціальний клас MixIn MyPojoDeMixIn
, щоб допомогти мені з десериалізацією. MyPojo
має змінні only int
та String
instance в поєднанні з належними геттерами та сеттерами. MyPojoDeMixIn
виглядає приблизно так:
public abstract class MyPojoDeMixIn {
MyPojoDeMixIn(
@JsonProperty("JsonName1") int prop1,
@JsonProperty("JsonName2") int prop2,
@JsonProperty("JsonName3") String prop3) {}
}
У своєму тестовому клієнті я роблю наступне, але, звичайно, це не працює під час компіляції, оскільки існує JsonMappingException
пов’язане з невідповідністю типу.
ObjectMapper m = new ObjectMapper();
m.getDeserializationConfig().addMixInAnnotations(MyPojo.class,MyPojoDeMixIn.class);
try { ArrayList<MyPojo> arrayOfPojo = m.readValue(response, MyPojo.class); }
catch (Exception e) { System.out.println(e) }
Я усвідомлюю, що міг би полегшити цю проблему, створивши об’єкт „Відповідь”, який має лише ArrayList<MyPojo>
в ньому, але тоді мені довелося б створювати ці дещо марні об’єкти для кожного типу, який я хочу повернути.
Я також дивився в Інтернеті на JacksonInFiveMinutes, але мені було жахливо зрозуміти, про що Map<A,B>
і як це пов'язано з моєю проблемою. Якщо ви не можете сказати, я абсолютно новачок у Java і походжу з Obj-C. Вони спеціально згадують:
На додаток до прив'язки до POJO та "простих" типів, існує ще один додатковий варіант: прив'язка до загальних (набраних) контейнерів. Цей випадок вимагає спеціальної обробки через так зване стирання типів (яке Java використовує для реалізації загальних засобів дещо назад сумісним способом), що заважає використовувати щось на зразок Collection.class (який не компілюється).
Отже, якщо ви хочете прив’язати дані до карти, вам потрібно буде використовувати:
Map<String,User> result = mapper.readValue(src, new TypeReference<Map<String,User>>() { });
Як я можу десериалізувати безпосередньо ArrayList
?