I'm not sure how to deserialize array containing plain strings.I'm trying to parse the following JSON
{ "state":"RT", "testMethod":"electronic", "testElements":[ { "testId":[ "UT_ITXref", "Fed_ITXref" ] }, "testStartDate", "testEndDate", "testDueDate" ] } I'm getting the following error:
com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of com.test.rules.model.TestElements: no String-argument constructor/factory method to deserialize from String value ('testStartDate') at [Source: {"state":"RT","testMethod":"electronic","testElements":[{"testId":["UT_ITXref","Fed_ITXref"]},"testStartDate","testEndDate","testDueDate"}]}; line: 1, column: 247] (through reference chain: com.test.rules.model.TestRules["testElements"]->java.lang.Object[][1]) at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:270) at com.fasterxml.jackson.databind.DeserializationContext.instantiationException(DeserializationContext.java:1456) at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1012) at com.fasterxml.jackson.databind.deser.ValueInstantiator._createFromStringFallbacks(ValueInstantiator.java:370) at com.fasterxml.jackson.databind.deser.std.StdValueInstantiator.createFromString(StdValueInstantiator.java:315) at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromString(BeanDeserializerBase.java:1282) at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeOther(BeanDeserializer.java:159) at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:150) at com.fasterxml.jackson.databind.deser.std.ObjectArrayDeserializer.deserialize(ObjectArrayDeserializer.java:196) at com.fasterxml.jackson.databind.deser.std.ObjectArrayDeserializer.deserialize(ObjectArrayDeserializer.java:20) at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:499) at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeWithErrorWrapping(BeanDeserializer.java:511) at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:396) at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1198) at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:314) at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:148) at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:1626) at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1220) Here is what I did , I used @JsonCreator annotation to deserialize
public class TestRules { private String state; private String testMethod; private TestElements[] testElements; @JsonCreator public TaxRules( @JsonProperty("state") String state, @JsonProperty("testMethod") String testMethod, @JsonProperty("testElements") TestElements[] testElements ) { this.state = state; this.testMethod = testMethod; this.testElements = testElements; } } public class TestElements { private List<String> testId; private List<String> elements; public List<String> getElements() { return elements; } public void setElements(List<String> elements) { this.elements = elements; } public List<String> getTestId() { return testId; } public void setTestId(List<String> testId) { this.testId = testId; } } Should I write custom deserializer or Is there any way that I can use the jackson API for this. Any suggestions would be appreciated.
jsonseems to be invalid. Are you suretestStartDate,testEndDateetc have no values?testElementsis a mixture of objects and strings in the json, but the pojos expect only objects of a certain shape