I'm using wildfly with resteasy + jackson and I've created a super abstract class named Participation, a subclass InnovationParticipation and a simple rest service. Here is the code:
//Super abstract class
@JsonTypeInfo(use=Id.NAME, property="theType", include = JsonTypeInfo.As.PROPERTY)
@JsonSubTypes({
@JsonSubTypes.Type(value=InnovationParticipation.class, name="innovation"),
})
public abstract class Participation implements Serializable {
private static final long serialVersionUID = -8008289902553477716L;
private String type;
private String groupName;
private String groupEmail;
//Constructor, getters and setters
}
//subclass
public class InnovationParticipation extends Participation {
private static final long serialVersionUID = -2843212924880669778L;
private String area;
private String innovationType;
private String title;
private String ideaDescription;
//Constructor, getters and setters
}
//rest request
public class ParticipationRequest implements Serializable {
private static final long serialVersionUID = -8919114519349685945L;
private Participation participation;
}
//rest method
@POST
@Path("/participate")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public ParticipationResponse participate(ParticipationRequest request) {
System.out.println("Yuppiiiii");
}
But Wildfly returns this error: com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of beans.Participation, problem: abstract types either need to be mapped to concrete types, have custom deserializer, or be instantiated with additional type information at [Source: io.undertow.servlet.spec.ServletInputStreamImpl@dd39841; line: 1, column: 18] (through reference chain: webservices.requests.ParticipationRequest["participation"])
Can anyone try to solve my problem?
Thanks in advance