我试图使用Jackson将类值写入JSON,其中包含Optional作为字段:
public class Test {
Optional<String> field = Optional.of("hello, world!");
public Optional<String> getField() {
return field;
}
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writeValueAsString(new Test()));
}
}
Run Code Online (Sandbox Code Playgroud)
执行时,此类生成以下输出:
{"field":{"present":true}}
Run Code Online (Sandbox Code Playgroud)
我理解当前/不存在的字段被包含在内并且可以在读取JSON数据时解决它,但是我无法解决可选的实际内容永远不会写入输出的事实.:(
除了不使用ObjectMapper之外,这里有任何变通方法吗?
想象一下以下场景:
class <T> Foo<T> {
....
}
class Bar {
Foo<Something> foo;
}
Run Code Online (Sandbox Code Playgroud)
我想为Foo编写一个自定义Jackson解串器.为了做到这一点(例如,为了反序列化Bar具有类Foo<Something>属性),我需要知道具体类型的Foo<T>,在使用Bar,在反序列化时间(比如我需要知道T是Something在particluar情况下).
如何编写这样的解串器?应该可以这样做,因为杰克逊用类型集合和地图来做.
澄清:
似乎有2个部分来解决问题:
1)获取foo内部声明的属性类型Bar并使用它来反序列化Foo<Somehting>
2)在反序列化时找出我们正在对foo类内的属性进行反序列化Bar以便成功完成步骤1)
如何完成1和2?