jackson反序列化:未被认可的领域

从教程我得到的印象是这应该工作(简化示例):

public class Foo { private String bar; public String getBar() { return bar; } public void setBar(String bar) { this.bar = bar; } public static class Qux { private String foobar; public String getFoobar() { return foobar; } public void setFoobar(String foobar) { this.foobar = foobar; } } } ... String in = "{ \"bar\": \"123\", \"qux\" : {\"foobar\": \"234\"}}"; ObjectMapper mapper = new ObjectMapper(); Foo obj = mapper.readValue(in, Foo.class); 

但是,我收到一个错误

 UnrecognizedPropertyException: Unrecognized field "qux" (Class Foo), not marked as ignorable 

我正在运行2.2.2

如果你将Qux类从Foo拉出来,它将会起作用

 public class Foo { private String bar; // added this private Qux qux; public String getBar() { return bar; } public void setBar(String bar) { this.bar = bar; } // added getter and setter public Qux getQux() { return qux; } public void setQux(Qux qux) { this.qux = bar; } } public static class Qux { private String foobar; public String getFoobar() { return foobar; } public void setFoobar(String foobar) { this.foobar = foobar; } } 

您可以配置ObjectMapper以忽略它在您的类中找不到的字段

 ObjectMapper mapper = new ObjectMapper(); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 

如果没有以这种方式配置,它将在解析时抛出exception,如果它找到一个它在您指定的类类型上无法识别的字段。

Foo类需要Qux类型的实例属性Qux使自动反序列化工作。 当前定义了Foo类的方式,没有目标属性来注入qux JSON对象值。

 public class Foo { private String bar; public String getBar() { return bar; } public void setBar(String bar) { this.bar = bar; } // additional property private Qux qux; public Qux getQux() { return qux; } public void setQux(Qux value) { qux = value; } public static class Qux { private String foobar; public String getFoobar() { return foobar; } public void setFoobar(String foobar) { this.foobar = foobar; } } }