Замените Json значение динамически, используя Джексона - PullRequest
0 голосов
/ 03 марта 2020

В настоящее время я читаю Json String

{
type = animal,
configurationData = {
    type =  "herbivorous",
    address = "123, Windmill Road"
}

}

Теперь я должен изменить значения после чтения из какого-либо объекта. Таким образом, обновленное значение будет выглядеть как

{
type = human,
configurationData = {
    type =  "vegeterian",
    address = "876, Borough Street"
}

}

и потребуется передать обновленную строку в удаленную службу. В настоящее время я делаю так.

  1. Создание объекта Java вручную из ввода JSON Строка (с использованием http://www.jsonschema2pojo.org/)

  2. Заполнение Java Объект вручную, вызывая сеттеры.

  3. Преобразование обновленного Java Объекта в JSON и отправка на удаленный сервис.

Здесь я вижу ненужные упражнения по чтению, заполнению и повторной записи перед отправкой на удаленный сервис.

Есть ли у нас что-то еще, чтобы добиться этого лучше? Я думал загрузить шаблон json (используя ObjectMapper) и просто обновить необходимые ключи в этой Json Map и отправьте эту Карту для удаления службы.

Что-то вроде,

    Resource resource = resourceLoader.getResource("classpath:" + myJsonFile);
    InputStream inputStream = resource.getInputStream();

    JsonNode node  = mapper.readTree(inputStream);
    //Search Keys from Json and store in Map. use Map.replace(K,V) to replace value and submit that Map to remote.

Но у меня не получается правильно выполнить операцию поиска и сохранения на карте. Поэтому любая помощь по этому вопросу будет полезна.

Заранее спасибо.

1 Ответ

0 голосов
/ 03 марта 2020

Вы можете использовать специальный десериализатор, который сделает эту работу за вас. Вы должны зарегистрировать пользовательский ресериализатор в простом модуле и, в свою очередь, направить простой модуль в средство отображения объектов. Таким образом, когда объектмаппер выполняет десериализацию, преобразование данных также выполняется.

Теперь у вас есть POJO с обновленными значениями. Когда вы сериализуете этот POJO для получения строки, сериализатор по умолчанию поможет вам получить то, что вы ожидали.

Таким образом, вы не имеете дело с манипуляцией текстом, а просто сбрасываете значения свойств в POJO во время десериализации.

Образец для нестандартного десериализатора

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...