Jersey, REST: Vererbung

saw

Mitglied
Hallo, folgende Situation: Ich habe 2 konkrete Klassen, die von einer gemeinsamen abstrakten Klasse erben, also grob sowas:

Code:
public abstract class ParentClass {
        private String commonValue;
}

public class Child1 extends ParentClass{
        private String child1Value;
}

public class Child2 extends ParentClass {
        private String child2Value;
}

Eine REST Resource Klasse hält eine Collection vom Typ ParentClass:

Code:
public class MyRESTResource {
        private String id;
        private Set<ParentClass> stuff;
}

Diese REST resource ist z.B. so ansprechbar:

Code:
GET .../resource/6c0f960f-a351-4da7-8f77-e5e6f15767e6

und die Collection "stuff" über

Code:
GET .../resource/6c0f960f-a351-4da7-8f77-e5e6f15767e6/stuff

Nun würde ich gerne per POST auf /resource/<ID>/stuff in der Lage sein eine Instanz vom Typ Child1 oder Child2 in stuff aufzunehmen. Ich habe bereits geschaut ob er vllt anhang der in JSON notierten Felder erkennt ob es sich um Child1 oder Child2 handelt und er mir die Instanz dann über einen ParentClass Parameter übergibt:

Code:
@Path("/{id}/stuff)
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response addChild(ParentClass child) {
        ...
}

Auch habe ich 2 POST Methoden bereitgestellt wobei die eine Child1, die andere Child2 als Parameter aufnimmt:

Code:
@Path("/{id}/stuff)
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response addChild(Child1 child) {
        ...
}

@Path("/{id}/stuff)
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response addChild(Child2 child) {
        ...
}

Auch das funktioniert nicht, da ich hier einen "Consuming media type conflic" bekomme.

Wie kann man das umsetzen?

grüße
saw
 

Zurück
Oben