Jackson Deserialization: unrecognized field

后端 未结 3 1291
说谎
说谎 2021-01-25 02:36

From the tutorial I had the impression that this should work (simplified example):

public class Foo {
    private String bar;
    public String getBar() {
              


        
相关标签:
3条回答
  • 2021-01-25 03:03

    It will work if you pull your Qux class out of 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;
        }
    }
    
    0 讨论(0)
  • 2021-01-25 03:17

    You can configure ObjectMapper to ignore fields it doesn't find in your class with

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

    If not configured this way, it will throw exceptions while parsing if it finds a field it does not recognize on the class type you specified.

    0 讨论(0)
  • 2021-01-25 03:24

    The Foo class needs an instance property of type Qux for automatic deserialization to work. The way the Foo class is currently defined, there is no destination property to inject the qux JSON object values.

    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;
           }
        }
    }
    
    0 讨论(0)
提交回复
热议问题