Java 杰克逊。将缺少的属性反序列化为空可选<;T>;

Java 杰克逊。将缺少的属性反序列化为空可选<;T>;,java,json,jackson,java-8,Java,Json,Jackson,Java 8,假设我有一门课是这样的: public Optional<String> something = Optional.empty(); 公共静态类测试{ 私人选择的东西; 公共可选getSomething(){ 归还某物; } 公共无效设置某物(可选某物){ 这个,某物,某物; } } 如果我反序列化这个JSON,我会得到一个空的可选值: {“某物”:null} 但如果属性丢失(在本例中为空JSON),我将得到null而不是可选的。当然,我可以自己初始化字段,但我认为最好有一种机

假设我有一门课是这样的:

public Optional<String> something = Optional.empty();
公共静态类测试{
私人选择的东西;
公共可选getSomething(){
归还某物;
}
公共无效设置某物(可选某物){
这个,某物,某物;
}
}
如果我反序列化这个JSON,我会得到一个空的可选值:

{“某物”:null}

但如果属性丢失(在本例中为空JSON),我将得到null而不是
可选的
。当然,我可以自己初始化字段,但我认为最好有一种机制来处理
null
和缺少的属性。那么,有没有办法让jackson将缺少的属性反序列化为空的
可选的

可选的实际上不是用作字段,而是用作返回值。为何不:

public static class Test {
  private String something;
  public Optional<String> getSomething() {
    return Optional.ofNullable(something);
  }
  public void setSomething(String something) {
    this.something = something;
  }
}
公共静态类测试{
私人串东西;
公共可选getSomething(){
返回可选。不可用的(某物);
}
公共无效设置某物(字符串某物){
这个,某物,某物;
}
}

对于没有getter/setter的解决方案,请确保
某些东西得到如下初始化:

public Optional<String> something = Optional.empty();
public Optional something=Optional.empty();

oracle不这么认为@AdamSkywalker取决于oracle的哪一个来源-从事API工作的人员。另请参见(谁是Joda time和java time API的幕后黑手)。每次有人调用getter时创建新对象不是会有开销吗?@ArtemMalinko我认为开销不是很大-如果创建和GC一个短期对象所需的几纳秒是这个类中的一个问题,那么您可能根本不应该使用Optional。。。你可以通过分析你的应用程序来发现真正的影响,这看起来是区分
null
和缺少值的方便方法。这是让jackson以同样的方式处理空值和缺少值的唯一简单方法