Jackson MismatchedInputException (нет конструктора/фабричного метода строкового аргумента для десериализации из значенияJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Jackson MismatchedInputException (нет конструктора/фабричного метода строкового аргумента для десериализации из значения

Сообщение Anonymous »

Я использую SpringBoot 2.3.1-RELEASE и пытаюсь десериализовать строку JSON в POJO, содержащий список объектов, но постоянно сталкиваюсь с этой ошибкой:
Невозможно экземпляр конструкции com.response.dto.RootDTO (хотя существует по крайней мере один создатель): нет конструктора/фабричного метода строкового аргумента для десериализации из строкового значения («Мета»)
в [Источник: ( String)""Meta":[{"DimensionName":"Version","DimensionId":"3b4860b9-b215-4192-bd7a-a76f377fc465","DimensionType":"Regular","Alias":"C0"," AttributeId":"211d5-d91f-40ec-9668-20e0da2ae7b3","AttributeName":"Имя версии","AttributeKey":"VersionKey"; строка: 1, столбец: 1]
Вот как выглядит моя строка JSON (но с escape-символами в eclipse):
{"Meta":[{"DimensionName":"Version", "DimensionId":"3b4860b9 -b215-4192-bd7a-a76f377fc465, "DimensionType":"Regular","Alias":"C0","AttributeId":"211b33d5-d91f-40ec-9668-20e0da2ae7b3","AttributeName":"Имя версии", "AttributeKey":"VersionKey"}]}.
Вот класс, в который я хочу его десериализовать:

Код: Выделить всё

@JsonIgnoreProperties(ignoreUnknown = true)
@Data
public class RootDTO
{
@JsonProperty("Meta")
private List Meta;
}

@JsonIgnoreProperties(ignoreUnknown = true)
@Data
public class MetaDTO
{

@JsonProperty("DimensionName")
private String DimensionName;

@JsonProperty("AttributeId")
private String AttributeId;

@JsonProperty("AttributeName")
private String AttributeName;

@JsonProperty("Name")
private String Name;

@JsonProperty("Alias")
private String Alias;
}
Это код, который не работает при попытке прочитать значение:

Код: Выделить всё

 ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);

objectMapper.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true);
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

objectMapper.readValue(jsonFormattedString, RootDTO.class));

Я вижу эту проблему только при запуске Junit (версия: 4.12). Я вижу jackson-databind-2.11.0, Spring-test-5.2.7.RELEASE в трассировке стека. Однако я отлаживаю вызов с помощью браузера или почтальона, все работает нормально. Я не уверен, почему он ищет строку Meta, если я указал ее как список. Что может быть причиной этой проблемы? Есть предложения?
Изменить: оказывается, строка, которая была передана в ObjectMapper, неверная. Вот такая строка кода

Код: Выделить всё

 String jsonFormattedString = responseEntity.getBody().substring(1,        responseEntity.getBody().lastIndexOf("\"")).replaceAll("\\\\", "");
, что делает мою издеваемую строку недействительной. Однако мне нужно выяснить, почему мы это делаем.

Подробнее здесь: https://stackoverflow.com/questions/683 ... ory-method
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»