У меня есть JSON, который является чем-то вроде следующего:преобразования JSON в объект Java дает неправильный тип перечисления
[{"type":"chair", "color":"red", "owners":["A","B"]}, {"type":"vase", "shape":"oval", "owners":["B", "C"]}]
Как видно, обе записи различны. Поэтому мне нужно десериализовать этот json и создать два объекта Chair and Vase. Владельцы, указанные выше, должны быть перечислены в соответствующем объекте. У json может быть много других подобных записей и в любом порядке. Поэтому я делаю это:
List<Map<String, Object>> things = objectMapper.readValue(json,
objectMapper.getTypeFactory().constructCollectionType(List.class, Map.class));
все это список карт, и каждая карта будет соответствовать одной вещи. Я перебираю список и каждую карту проверяю «тип» и создаю экземпляр соответствующего объекта. Например:
if map.get("type") == "chair" then new Chair(map.get("color"), map.get("owners"));
Теперь у меня есть перечислений ХОЗЯЕВ. Поэтому я делаю это:
List<OWNERS> owners = (ArrayList<OWNERS>) map.get("owners");
Я правильно понял список. Но когда я проверяю так:
assertEquals(OWNERS.A, owners.get(0));
Я получаю сообщение об ошибке: 'ожидаемые java.lang.OWNERS ("А"), но получил java.lang.String ("А")'
Как вы можете вид владельцев - List. Что мне не хватает? Я разбираю неправильный путь?
Какой JSON API вы используете? Проверьте класс с методом constructCollectionType, если есть способ сопоставить строки с перечислениями. Enum - это концепция Java, а не JSON. –