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以同样的方式处理空值和缺少值的唯一简单方法