MismatchedInpuException is base class for all JsonMappingExceptions. It occurred when input is not mapping with target definition or mismatch between as required for fulfilling the deserialization. This exception is used for some input problems, but in most cases there should be more explicit subtypes to use.
MismatchedInputException Example
Here MismatchedInputException is occurring because of StudentDetail class define as private but Jackson always looks for class POJO for deserialization.
package com.fiot.json.jackson.annotations; import java.io.IOException; import java.util.Date; import java.util.List; import java.util.Map; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonGenerationException; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fiot.json.jackson.pojo.Address; import com.fiot.json.jackson.pojo.Student; public class JsonIgnoreUnknownProperties { public static void main(String[] args) { String json=" {\"id\" : 11,\"firstName\" : \"Saurabh\",\"middleName\" : \"Kumar\",\"lastName\" : \"Gupta\"}"; System.out.println(json); try { // ObjectMapper new instance ObjectMapper objectMapper = new ObjectMapper(); //convert json data to respective java object StudentDetail student = objectMapper.readValue(json, StudentDetail.class); // print java student java object System.out.println(student); } catch (JsonMappingException ex) { ex.printStackTrace(); } catch (JsonGenerationException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } } @JsonIgnoreProperties(ignoreUnknown = true) private class StudentDetail { @JsonProperty(value = "id") private int rollNumber; @JsonProperty(value = "firstName") private String firstName; @JsonProperty(value = "lastName") private String lastName; //Getter and Setter } }
Stacktrace of Exception
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `com.fiot.json.jackson.annotations.JsonIgnoreUnknownProperties$StudentDetail` (although at least one Creator exists): can only instantiate non-static inner class by using default, no-argument constructor
at [Source: (String)" {"id" : 11,"firstName" : "Saurabh","middleName" : "Kumar","lastName" : "Gupta",}"; line: 1, column: 3]
at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:63)
at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1343)
at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1032)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1294)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:326)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:159)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4013)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3004)
at com.fiot.json.jackson.annotations.JsonIgnoreUnknownProperties.main(JsonIgnoreUnknownProperties.java:27)
Solutions
As solution of this exception for current issue define StudentClass as public because Jackson looks for POJO class for deserialization.
As per definition of POJO (Plain Old Java Object) is the class with out any restriction, having getter and setter methods, if required can also implement object class methods like equals, toString() etc.
You would like to see
Follow below link to see more JSON issues solutions:
You must log in to post a comment.