JsonMappingException: No suitable constructor found for type [simple type, class ]: can not instantiate from JSON object JsonMappingException: No suitable constructor found for type [simple type, class ]: can not instantiate from JSON object java java

JsonMappingException: No suitable constructor found for type [simple type, class ]: can not instantiate from JSON object


So, finally I realized what the problem is. It is not a Jackson configuration issue as I doubted.

Actually the problem was in ApplesDO Class:

public class ApplesDO {    private String apple;    public String getApple() {        return apple;    }    public void setApple(String apple) {        this.apple = apple;    }    public ApplesDO(CustomType custom) {        //constructor Code    }}

There was a custom constructor defined for the class making it the default constructor. Introducing a dummy constructor has made the error to go away:

public class ApplesDO {    private String apple;    public String getApple() {        return apple;    }    public void setApple(String apple) {        this.apple = apple;    }    public ApplesDO(CustomType custom) {        //constructor Code    }    //Introducing the dummy constructor    public ApplesDO() {    }}


This happens for these reasons:

  1. your inner class should be defined as static

    private static class Condition {  //jackson specific    }
  2. It might be that you got no default constructor in your class (UPDATE: This seems not to be the case)

    private static class Condition {    private Long id;    public Condition() {    }    // Setters and Getters}
  3. It could be your Setters are not defined properly or are not visible (e.g. private setter)


I would like to add another solution to this that does not require a dummy constructor. Since dummy constructors are a bit messy and subsequently confusing. We can provide a safe constructor and by annotating the constructor arguments we allow jackson to determine the mapping between constructor parameter and field.

so the following will also work. Note the string inside the annotation must match the field name.

import com.fasterxml.jackson.annotation.JsonProperty;public class ApplesDO {        private String apple;        public String getApple() {            return apple;        }        public void setApple(String apple) {            this.apple = apple;        }        public ApplesDO(CustomType custom){            //constructor Code        }        public ApplesDO(@JsonProperty("apple")String apple) {        }}