Как десериализовать JSON для класса, имеющего дополнительные поля, используя Джексона - PullRequest
0 голосов
/ 15 февраля 2019

Я использую Jackson для десериализации класса, который имеет Optional переменные-члены, поэтому он выглядит как

class Test{
   Optional<String> testString;
}

, но в сериализованной форме это выглядит так, что вполне допустимо

{
"value": {
"testString": "hi"
}

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

1 Ответ

0 голосов
/ 15 февраля 2019

Вам необходимо зарегистрироваться Jdk8Module.Ниже вы можете найти пример, как это сделать:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;

import java.io.File;
import java.util.Optional;

public class JsonApp {

    public static void main(String[] args) throws Exception {
        ObjectMapper mapper = new ObjectMapper();
        mapper.registerModule(new Jdk8Module());

        Test test = new Test();
        test.setTestString(Optional.of("str"));

        String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(test);
        System.out.println(json);
        System.out.println(mapper.readValue(json, Test.class));
    }
}

Надпечатки кода выше:

{
  "testString" : "str"
}
Test{testString=Optional[str]}

См. Также:

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