Mapper le tableau d'objets JSON à @RequestBody List & lt; T & gt; en utilisant jackson
Je vais avoir des problèmes à l'aide de Jackson à la carte un Javascript posté JSON tableau de hachages (Tag).
Voici les données reçues par le contrôleur @RequestBody (C'est de l'envoyer avec un bon json requestheader):
[{name=tag1}, {name=tag2}, {name=tag3}]
Ici, c'est le contrôleur:
@RequestMapping(value = "purchases/{purchaseId}/tags", method = RequestMethod.POST, params = "manyTags")
@ResponseStatus(HttpStatus.CREATED)
public void createAll(@PathVariable("purchaseId") final Long purchaseId, @RequestBody final List<Tag> entities)
{
Purchase purchase = purchaseService.getById(purchaseId);
Set<Tag> tags = purchase.getTags();
purchaseService.updatePurchase(purchase);
}
Quand je debug et afficher les 'entités' valeur révèle qu'il s'agit d'une liste de tableaux de générique des objets, non pas comme une liste d'objets de type " Tag " que je m'attends.
Comment puis-je obtenir jackson à la carte, un tableau transmis des objets à une liste de obejcts de type "Tag"?
Grâce
source d'informationauteur Thomas Buckley
Vous devez vous connecter pour publier un commentaire.
Ça sonne comme le Printemps n'est pas en passant de type complet de l'information pour une raison quelconque, mais plutôt un type effacé version, comme si la déclaration a été quelque chose comme
List<?> tag
. Je ne sais pas ce qui peut être fait pour résoudre complètement ce (peut-être besoin de quelque chose à partir du Printemps de l'intégration de l'équipe), mais une façon de contourner est de définir votre propre type:et l'utiliser à la place. Cela permettra de conserver générique paramétrage par le biais de super-déclarations de type, de sorte que même si le Printemps ne fait que passer l'équivalent de
TagList.class
Jackson peut comprendre laTag
paramètre.Une autre façon de le faire c'est plutôt obtenir un tableau que d'une Liste, comme suit:
Jackson nécessite un constructeur par défaut sans paramètre sur des Objets personnalisés, de sorte que vous aurez besoin d'ajouter simplement un constructeur par défaut de votre
Tag
classe.Dans votre cas, ajoutez simplement à votre
Tag
classe: