如何使用杰克逊反序列化具有可选字段的类的json

时间:2019-02-15 06:19:34

标签: java jackson deserialization optional

我正在使用Jackson对具有Optional成员变量的类进行反序列化,所以看起来像

class Test{
   Optional<String> testString;
}

但看起来像是序列化的形式,这是合法的

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

如何将其反序列化回我的Test类?因为在尝试这样做时,它会显示未知字段“值”。无需更改我的测试课程就可以了。

1 个答案:

答案 0 :(得分:0)

您需要注册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. jackson-modules-java8