Comment puis-je demander à jackson d'utiliser un sérialiseur différent pour chaque type de collection générique. J'ai un CustomProductsSerializer et un CustomClientsSerializerSérialisation polymorphe des collections avec Custom Serializer dans jackson
public class ProductsListSerializer extends JsonSerializer<List<Products>>{
// logic to insert __metadata , __count into json
public void serialize(List<Products> value, JsonGenerator jgen, SerializerProvider provider) {
.... .... ....
}
// always returns ArrayList.class
public Class<List<Instrument>> handledType() {
Class c = var.getClass();
return c;
}
}
public class CustomClientsSerializer extends JsonSerializer<List<Clients>>{
// logic to insert __metadata , __count into json
public void serialize(List<Clients> value, JsonGenerator jgen, SerializerProvider provider){
.... .... ....
}
.... .... ....
// always returns ArrayList.class
public Class<List<Clients>> handledType() {
Class c = var.getClass();
return c;
}
}
Je me suis inscrit à la fois les serializers utilisant SimpleModule. Le problème étant que handleType dans les deux cas renvoie ArrayList.class, la sérialisation des clients ci-dessous échoue avec une exception de transtypage de classe.
List<Clients> clients;
// code to get clients from database.
String jsonString = mapper.writeValueAsString(clients);
Comment demander à jackson quel sérialiseur utiliser? J'utilise jackson comme sérialiseur json avec resteasy.
--Modifier en réponse à @ HiJon89 J'ai un objet métier qui renvoie 'Liste' et un autre qui renvoie Liste. La façon dont j'ai besoin est quand l'objet Busines retourne une 'Liste' alors ProductsListSerializer devrait être utilisé pour toute la liste. et Lorsque l'objet métier renvoie la liste, le CustomClientsSerializer doit être utilisé pour la liste entière. Dans mon cas d'utilisation, j'ajoute des éléments supplémentaires au json sérialisé 'eg: __ count, __metadata, __references' Il n'y a qu'un seul compte par collection. Contentusing Ne peut être utilisé que sur les propriétés. Aucune suggestion ?
Le problème peut être résolu en enregistrant le sérialiseur pour un JavaType donné (com.fasterxml.jackson.databind). Mais le simpleModule.addSerializer() accepte deux paramètres Class et Serilaizer. Je ne suis pas en mesure de trouver une méthode qui peut accepter JavaType. –