Avec ce code
@RequestMapping(value = "/bar/foo", method = RequestMethod.GET)
public ResponseEntity<foo> foo() {
Foo model;
...
return ResponseEntity.ok(model);
}
}
Je reçois l'exception suivante
Java.lang.IllegalArgumentException: No converter found for return value of type
Je suppose que l'objet ne peut pas être converti en JSON car Jackson est manquant. Je ne comprends pas pourquoi parce que je pensais que Jackson était construit avec une botte de printemps.
Ensuite, j'ai essayé d'ajouter Jackson au fichier pom.xml mais j'ai toujours la même erreur
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.4.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.4.3</version>
</dependency>
Dois-je modifier les propriétés d’une initialisation de ressort pour que cela fonctionne?
Je vous remercie
Le problème était que l’un des objets imbriqués dans Foo n’avait aucun getter/setter
Ajoutez la dépendance ci-dessous à votre pom.xml:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.1</version>
</dependency>
Utilisez @ResponseBody
et getter/setter
. J'espère que cela résoudra votre problème.
@RequestMapping(value = "/bar/foo", method = RequestMethod.GET)
@ResponseBody
public ResponseEntity<foo> foo() {
et mettez à jour votre mvc-dispatcher-servlet.xml
:
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
</mvc:message-converters>
</mvc:annotation-driven>
Ajoutez le getter/setter manquant dans le bean mentionné dans le message d'erreur.
J'ai eu le même problème, et malheureusement, il n'a pas pu être résolu en ajoutant des méthodes getter ou en ajoutant des dépendances jackson.
J'ai ensuite regardé Official Spring Guide et suivi leur exemple, comme indiqué ici - https://spring.io/guides/gs/actuator-service/ - où l'exemple montre également la conversion d'un objet renvoyé au format JSON .
J'ai ensuite de nouveau créé mon propre projet, à la différence que cette fois-ci, j'ai également ajouté les dépendances et les plug-ins construits dans le fichier pom.xml de l'exemple du Guide officiel du printemps que j'ai mentionné ci-dessus.
Les dépendances modifiées et la partie de construction du fichier XML ressemblent à ceci!
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
Vous pouvez voir la même chose dans le lien mentionné ci-dessus.
Et comme par magie, au moins pour moi, ça marche. Donc, si vous avez déjà épuisé vos autres options, vous voudrez peut-être essayer, comme ce fut le cas avec moi.
Juste une note de côté, cela n'a pas fonctionné pour moi lorsque j'ai ajouté les dépendances de mon projet précédent et que Maven a installé et mis à jour des éléments de projet. Donc, je devais encore faire mon projet à partir de zéro. Cela ne me dérangeait pas beaucoup, car le mien est un exemple de projet, mais vous voudrez peut-être aussi le rechercher!
Le problème est survenu dans mon cas car le framework spring ne pouvait pas extraire les propriétés des objets imbriqués. Getters/Setters est un moyen de résoudre le problème. Rendre les propriétés publiques est une autre solution rapide et sale à valider si tel est bien le problème.
Je recevais la même erreur pendant un certain temps.J'ai dû vérifier que les méthodes de lecture étaient disponibles pour toutes les propriétés.Still continuait à recevoir la même erreur .
<mvc:annotation-driven/>
Cela est nécessaire pour que Spring détecte la présence de jackson et configure les convertisseurs correspondants.
Dans mon cas, j'ai oublié d'ajouter la bibliothèque jackson-core.jar, j'ai seulement ajouté jackson-annotations.jar et jackson-databind.jar. Lorsque j'ai ajouté jackson-core.jar, le problème a été résolu.
J'ai vu la même erreur lorsque la portée de la dépendance jackson-databind
avait été définie sur test
:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.9</version>
<scope>test</scope>
</dependency>
La suppression de la ligne <scope>
a résolu le problème.
J'ai également rencontré une telle erreur quand, par accident, vous avez placé deux lignes identiques @JsonProperty ("une_valeur") sur des propriétés différentes de la classe.
L'annotation @EnableWebMvc sur la classe de configuration a résolu mon problème. (Spring 5, pas de fichier web.xml, initialisé par AbstractAnnotationConfigDispatcherServletInitializer)
Je faisais face au même problème depuis longtemps, puis je devais convertir un objet en JSON en utilisant Object Mapper et le transmettre en tant que Objet JSON
@RequestMapping(value = "/getTags", method = RequestMethod.GET)
public @ResponseBody String getTags(@RequestParam String tagName) throws
JsonGenerationException, JsonMappingException, IOException {
List<Tag> result = new ArrayList<Tag>();
for (Tag tag : data) {
if (tag.getTagName().contains(tagName)) {
result.add(tag);
}
}
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(result);
return json;
}