【发布时间】:2014-10-30 20:18:04
【问题描述】:
我试图使用 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()));
}
}
执行时,该类生成以下输出:
{"field":{"present":true}}
我了解包含的当前/不存在字段,并且可以在读取 JSON 数据时解决它,但是我无法解决可选的实际内容从未写入输出的事实。 :(
除了不使用 ObjectMapper 之外,这里有什么解决方法吗?
【问题讨论】:
-
Optionals 并不意味着用作字段(或就此而言的属性)。它们只能用作返回值。
-
@zeroflagL 您能否提供任何可靠的来源来描述 Optional 的含义?
-
@Jonas this answer 例如:我们的目的是为库方法返回类型提供有限的机制,在这种情况下需要一种明确的方式来表示“无结果”。不实现
Serializable也是不言而喻的。 -
即使将
Optional仅视为返回类型,我们仍可能希望将返回的Optional放在JSON 表示中。例如您有一项服务返回给定文本的语言。服务方法调用返回一个Optional,这就是你想要的json。