Преобразовать строку с json в список - PullRequest
3 голосов
/ 21 февраля 2020

Я пытаюсь преобразовать JSON String (должен быть в списке) в список объектов:

[   
    {
        "paramName":"Content-Type",
         "paramValue":"text/xml; charset\u003d\"utf-8\""
    }
]

Это мой класс Service.class:

String jSONString = new Gson().toJson(systemParams);
ObjectMapper mapper = new ObjectMapper();
List<A> map = (List<A>) mapper.readValue(jSONString, A.class);

Это моя модель:

@Data
@AllArgsConstructor
    public class A {

        String paramName;
        String paramValue;
    }

Но я получил исключение:

Невозможно десериализовать экземпляр java.util.LinkedHashMap

Поэтому я попытался по-другому:

A[] map = mapper.readValue(jSONString, A[].class);

И я получил:

InvalidDefinitionException: Невозможно создать экземпляр com.model.A (никаких создателей, как по умолчанию, не существует):

ОБНОВЛЕНИЕ:

Я пытался изменить Service.class для:

List<A> map = mapper.readValue(jSONString, new TypeReference<List<A>>(){});

Все еще получено исключение:

com.faster xml .jackson.databind.ex c .InvalidDefinitionException: Невозможно создать экземпляр com.model.A (не существует создателей, как, например, конструкция по умолчанию):

Поэтому я удалил аннотацию @AllArgsConstructor и добавил конструктор вручную:

   public A(String paramName, String paramValue) {}

И еще исключение:

com.faster xml .jackson.databind.ex c .InvalidDefinitionExc eption: Невозможно создать экземпляр com.model.A (создатели, такие как конструкция по умолчанию, не существуют):

1 Ответ

1 голос
/ 21 февраля 2020

Я думаю, что проблема написана в ошибке: попробуйте определить пустой конструктор для класса, который должен быть десериализован. Я также думаю, что для сериализации класса (так, иначе, от байта к классу) вы должны реализовать сериализуемый интерфейс.

...