I missed the need for @JsonCreator. I'll try that now. Does having a no-argument constructor remove the need for any of the annotations I'm using (JsonTypeInfo, JsonTypeName)
Here's the full error message/hint: Can not construct instance of persist.seg.tables.pojos.Segment: no suitable constructor found, can not deserialize from Object value (missing default constructor or creator, or perhaps need to add/enable type information?) at [Source: payload.json; line: 5, column: 5] (through reference chain: edu.utah.camplab.app.SGSPayload["segmentList"]->java.util.ArrayList[0]) On Friday, May 12, 2017 at 5:57:12 PM UTC-6, Tatu Saloranta wrote: > > I am not sure I understand the question wrt requiring no-arguments > constructor: yes, any object that Jackson is to create must be > constructed somehow: and choice is usually either via zero-arguments > constructor, or a constructor with `@JsonCreator` annotation. > > What exactly is the exception you get? And what does the class being > deserialized look like wrt consructors it has? > > -+ Tatu +- > > > On Fri, May 12, 2017 at 4:28 PM, Rob Sargent <[email protected] > <javascript:>> wrote: > > I'm generating classes with these annotations > > @JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, > include=JsonTypeInfo.As.PROPERTY, > > property="class") > > @JsonTypeName("persist.seg.tables.pojos.Segment") > > and I generate json such as > > > > { > > "userName" : "rob", > > "segmentList" : [ { > > "class" : "persist.seg.tables.pojos.Segment", > > "id" : "d4fca0dc-c20f-436d-b2d5-45950c148357", > > "chrom" : 1, > > "markersetId" : "668ea0fd-e028-408f-bc46-58691aaf194e", > > "probandsetId" : "48f7be44-87b7-4aec-8a8f-6eff0ff21da2", > > "startbase" : 1123456, > > "endbase" : 1223456, > > "eventsGreater" : 299000, > > "eventsEqual" : 300, > > "eventsLess" : 700 > > }, { > > "class" : "persist.seg.tables.pojos.Segment", > > "id" : "52a8116d-8f68-4950-8641-730b4d99b34c", > > "chrom" : 1, > > "markersetId" : "668ea0fd-e028-408f-bc46-58691aaf194e", > > "probandsetId" : "48f7be44-87b7-4aec-8a8f-6eff0ff21da2", > > "startbase" : 1123456, > > "endbase" : 1223456, > > "eventsGreater" : 299900, > > "eventsEqual" : 30, > > "eventsLess" : 70 > > }, { > > "class" : "persist.seg.tables.pojos.Segment", > > "id" : "c021517a-5b3e-48b8-928c-7790c0fe9a73", > > "chrom" : 1, > > "markersetId" : "668ea0fd-e028-408f-bc46-58691aaf194e", > > "probandsetId" : "48f7be44-87b7-4aec-8a8f-6eff0ff21da2", > > "startbase" : 1123456, > > "endbase" : 1223456, > > "eventsGreater" : 299990, > > "eventsEqual" : 3, > > "eventsLess" : 7 > > } ] > > } > > > > But without a no-argument constructor the deserialization fails. I > thought > > the annotations would answer the suggestion in the error message > "perhaps > > need to add/enable type information?" > > > > On Thursday, October 6, 2016 at 9:57:18 PM UTC-6, krrrr38 wrote: > >> > >> Hi. I use jackson-databind 2.8.3. > >> > >> I want to serialize value with `@JsonTypeName`. When serialize with > >> `List`, the property value is not shown. > >> > >> public class Main { > >> public static void main(String[] args) throws Exception { > >> ObjectMapper om = new ObjectMapper(); > >> System.out.println(om.writeValueAsString(new ExampleContent())); > >> System.out.println(om.writeValueAsString(Arrays.asList(new > >> ExampleContent()))); > >> } > >> > >> @JsonTypeInfo( > >> use = JsonTypeInfo.Id.NAME, > >> include = JsonTypeInfo.As.PROPERTY, > >> property = "type", > >> visible = true > >> ) > >> @JsonSubTypes({ > >> @JsonSubTypes.Type(ExampleContent.class) > >> }) > >> abstract static public class AbstractContent { > >> } > >> > >> @JsonTypeName("text") > >> public static class ExampleContent extends AbstractContent { > >> } > >> } > >> > >> > >> result > >> > >> {"type":"text"} > >> [{}] > >> > >> > >> expected? > >> > >> {"type":"text"} > >> [{"type":"text"}] > >> > >> Do I need to add more annotation or something? > >> > >> Regargs. > >> > > -- > > You received this message because you are subscribed to the Google > Groups > > "jackson-user" group. > > To unsubscribe from this group and stop receiving emails from it, send > an > > email to [email protected] <javascript:>. > > To post to this group, send email to [email protected] > <javascript:>. > > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "jackson-user" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. For more options, visit https://groups.google.com/d/optout.
