Джексон десериализует строку JSON с пустой строкой вместо объекта - PullRequest
2 голосов
/ 21 сентября 2019

У меня возникают проблемы с десериализацией ответа, полученного от внешнего API.

Обычно API возвращает следующий JSON:

{ 
 "RootObj": {
   "InnerObj" : [
           {"Elem1": "Val1"},
       ]
    }
}

То есть все в порядке.Однако, когда API не находит что-либо, он возвращает этот JSON:

{ 
 "RootObj": ""
}

Но с этим JSON Джексон не может десериализовать его ... и при использовании deserializeOption ACCEPT_EMPTY_STRING_AS_NULL_OBJECT.

JSON преобразуется в:

{ 
 "RootObj": null
}

Однако теперь Джексон не может создать экземпляр моего POJO из-за нулевого указателя.Я ожидал, что он создаст класс rootObj с InnerObj, установленным в null ..

Я испробовал все виды тактики, например, @jsonsetter и т. Д. Но мне не повезло в этом.У кого-нибудь есть идеи как это решить?Желательно с настройкой объекта карты.

1 Ответ

0 голосов
/ 21 сентября 2019

Добавьте это свойство в ObjectMapper

DeserializationFeature ACCEPT_EMPTY_STRING_AS_NULL_OBJECT

Функция, которую можно включить, чтобы пустое строковое значение JSON ("") связывалось с POJO как ноль.Если этот параметр отключен, стандартные POJO могут быть связаны только с JSON null или JSON Object (стандартное значение, означающее, что пользовательские десериализаторы или конструкторы не определены; оба могут добавить поддержку других типов значений JSON);если включено, пустая строка JSON может быть принята равной нулю JSON.

...