Java 如何告诉Jackson对非缺失字段(包括嵌套字段)反序列化更新值

Java 如何告诉Jackson对非缺失字段(包括嵌套字段)反序列化更新值,java,json,jackson,Java,Json,Jackson,我用一些值创建了一个Foo类,并使用同一个Foo项目进行反序列化 public class Foo { public String name; public Integer age; public Goo g; } static public class Goo { public Long id; public Integer level; } assume // String jsonStr = {"name"

我用一些值创建了一个Foo类,并使用同一个Foo项目进行反序列化

public class Foo {
        public String name;
        public Integer age;
        public Goo g;
}
static public class Goo {

        public Long id;
        public Integer level;
}

assume // String jsonStr = {"name" : "alan"; "g": {"level":6}}
Foo f = new Foo();
f.name = "dummy";
f.age = 99;
//asssume f.g.id = 3
objectMapper.readerForUpdating(f).readValue(jsonStr);
// f object toString
output {"name" : "alan"; "age" : 99, "g":{"id": null, "level":6}}
如何进行配置,使其不会更新字段上的任何值或默认值,这些值在缺少的字段上有值

而是喜欢低于输出

output {"name" : "alan"; "age" : 99, "g":{"id": 3, "level":6}}

您可以手动配置映射器或为
Foo
类添加注释

手动:

objectMapper.setSerializationInclusion(Include.NON_NULL);
或者在类(甚至属性)上放置注释:


编辑:如果您想忽略空值,这会回答这个问题,但是作为对这个问题的评论,您的代码中可能有错误。在读取之前重新分配变量,显然

=
是赋值运算符。您希望Jackson如何从先前由
f
引用的对象中获取值99?是的,您是对的。改用ReaderForUpdate。它起作用了。谢谢。我把问题说得更具体了。我不相信你能说得那么深。是的,我不能。是的,我在问任何可能的问题。也许我的问题不清楚。无论如何,这不是我想要的答案。从这里找到答案
@JsonInclude(Include.NON_NULL)
public class Foo {
        public String name;
        public Integer age;
}