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; } } }