Spring MVC @ResponseBody de retourner une Carte produit “Erreur 406 not ACCEPTABLE”
Je vais avoir un problème, essayer de mettre en place @ResponseBody de renvoyer une collection. J'ai JAXB pots dans le classpath et je n'ai pas configuré de ContentNegotiatingViewResolver.
C'est mon simple objet:-
@XmlRootElement(name = "test-object")
@XmlAccessorType(XmlAccessType.FIELD)
public class TestObject implements Serializable {
@XmlAttribute
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
J'ai écrit un test simple qui retourne un objet unique... cela fonctionne sans problème, et je suis en mesure de voir le XML généré:-
@RequestMapping(value = "one", method = RequestMethod.GET)
public @ResponseBody TestObject getSingleObject() {
TestObject obj = new TestObject();
obj.setId(1);
return obj;
}
Ce que je veux vraiment, c'est de renvoyer une liste d'objets. Après lecture, il semble que la façon de le faire est de placer la liste sur une carte et de retourner la carte:-
@RequestMapping(value = "all", method = RequestMethod.GET)
public @ResponseBody Map<String, ? extends Object> getAllObjects() {
TestObject obj1 = new TestObject();
obj1.setId(1);
TestObject obj2 = new TestObject();
obj2.setId(2);
List<TestObject> list = Arrays.asList(obj1, obj2);
return Collections.singletonMap("all-objects", list);
}
Quand j'execute le ci-dessus, j'obtiens "Erreur 406 not Acceptable".
Qu'ai-je fait de mal? Je suis en cours d'exécution sur la Jetée 6.1 si cela fait une différence.
Grâce.
OriginalL'auteur limc | 2011-09-07
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de ces deux dépendances ajoutées dans la pom.xml!
OriginalL'auteur Samuel
J'ai eu le même problème et après quelques heures de débogage, j'ai enfin trouvé la solution. Juste au cas où quelqu'un d'autre coincé avec le même problème, c'est ce que j'ai trouvé.
Vous avez probablement suivi Ajax Simplifications au Printemps 3 qui vous dit d'utiliser le mvc:annotation-driven configuration de l'élément.
Ce qu'il ne vous dit pas, c'est que mvc:annotation-driven est juste un raccourci pour définir un couple de la norme haricots, sauf si vous avez déjà un de ces haricots défini!
Avec le mvc:annotation-driven configuration d'un MappingJacksonHttpMessageConverter est enregistré en tant que messageConverter sur un org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.
Si vous avez défini votre propre AnnotationMethodHandlerAdapter, vous devez également définir manuellement ce MappingJacksonHttpMessageConverter .
Cfr Message personnalisé convertisseurs enregistré avec AnnotationMethodHandlerAdapter ne sont pas utilisés, seuls ceux par défaut sont utilisés. qui traite du même problème.
Vérifiez également SPR-6524 et SPR-6306, ne peuvent pas poster des liens de spam de prévention 🙁
La partie pertinente dans mon printemps config fini par ressembler à ceci:
OriginalL'auteur dblocks
Je sais que cette question est un peu vieux, mais j'ai eu le même problème.
J'ai résolu en ajoutant à construire le chemin de deux pots:
jackson-core-asl-1.x.jar
etjackson-mapper-asl-1.x.jar
. Vous pouvez les télécharger ici: http://wiki.fasterxml.com/JacksonDownload ou si vous utilisez Maven, vous pouvez les ajouter en tant que projet de dépendance.Notez que j'ai utilisé la version 1.x (1.9, dans mon cas) et non pas 2.x. La dernière version ne fonctionne pas pour moi.
OriginalL'auteur davioooh
Plus une suggestion qu'une réponse, mais avez-vous essayé de créer la carte, puis ajouter l'objet et puis il suffit de retourner la carte comme ça?
OriginalL'auteur theRedemer