I am getting the following error when trying to get a JSON request and process it:
org.codehaus.jackson.map.JsonMappingException: No suitable constructor found for type [simple type, class com.myweb.ApplesDO]: can not instantiate from JSON object (need to add/enable type information?)
Here is the JSON I am trying to send:
{   "applesDO" : [     {       "apple" : "Green Apple"     },     {       "apple" : "Red Apple"     }   ] }   In Controller, I have the following method signature:
@RequestMapping("showApples.do") public String getApples(@RequestBody final AllApplesDO applesRequest){     // Method Code }   AllApplesDO is a wrapper of ApplesDO :
public class AllApplesDO {      private List<ApplesDO> applesDO;      public List<ApplesDO> getApplesDO() {         return applesDO;     }      public void setApplesDO(List<ApplesDO> applesDO) {         this.applesDO = applesDO;     } }   ApplesDO:
public class ApplesDO {      private String apple;      public String getApple() {         return apple;     }      public void setApple(String appl) {         this.apple = apple;     }      public ApplesDO(CustomType custom){         //constructor Code     } }   I think that Jackson is unable to convert JSON into Java objects for subclasses. Please help with the configuration parameters for Jackson to convert JSON into Java Objects. I am using Spring Framework.
EDIT: Included the major bug that is causing this problem in the above sample class - Please look accepted answer for solution.
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() {     }  } 
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With