简体   繁体   English

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

[英]How to Deserialize json for class having Optional fields using Jackson

I'm using Jackson to deserialise a class which has Optional member variables, so it looks like 我正在使用Jackson来反序列化具有Optional成员变量的类,所以看起来像

class Test{
   Optional<String> testString;
}

but in serialised form it looks like, which is legit 但是以序列化的形式看起来是合法的

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

How can I deserialise it back to my Test class?, because when I try to do so it says unknown field "value". 我如何将其反序列化回我的Test类?,因为当我尝试这样做时,它说未知字段“值”。 Can it be possible without changing my test class. 是否可以不更改我的测试课程。

You need to register Jdk8Module . 您需要注册Jdk8Module Belowe you can find example, how to do that: 在下面您可以找到示例,该如何做:

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));
    }
}

Above code prints: 上面的代码打印:

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

See also: 也可以看看:

  1. jackson-modules-java8 杰克逊模块-java8

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM