Sto scrivendo un servizio REST utilizzando Jersey. Ho una promozione classe astratta che ha un'annotazione:@JsonTypeInfo (use = JsonTypeInfo.Id.CLASS) non funziona quando viene restituita la risposta
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS)
Grazie a ciò, quando torno un elenco di oggetti:
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("promotions/")
public List<Promotion> getClosestPromotions() {
List<Promotion> promotions = getPromotions(); //here I get some objects
return promotions;
}
ottengo una stringa JSON con un campo "@class" per ogni oggetto in quella lista. Ma il problema è che se restituire una risposta:
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("promotions/")
public Response getClosestPromotions() {
List<Promotion> promotions = getPromotions(); //here I get some objects
return Response.ok().entity(promotions).build();
}
sto ottenendo quasi la stessa lista, ma senza ulteriore campo "@class". Perché è questo e cosa posso fare per ottenere una lista con il campo "@class" che restituisce una lista in Risposta? E a proposito, sorprendentemente, funziona quando restituisco una risposta con un oggetto di promozione dato solo come entità e ottengo quel campo "@class".
Non ho sufficiente per una risposta ancora, ma. Il metodo entità accetta un oggetto. Il codice sottostante controlla probabilmente il tipo in fase di runtime per ripristinare le informazioni sul tipo. Sfortunatamente questo lo otterrà fino alla lista e non alla lista. Lo scrive come una lista senza informazioni di tipo generico, quindi perderesti il campo della classe. Scrivere un oggetto che ha la lista come variabile membro probabilmente funzionerà, ma sto cercando di trovare qualcosa di più pulito. –