web-dev-qa-db-fra.com

java.lang.IllegalArgumentException: aucun convertisseur trouvé pour la valeur de retour du type

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

56
Marc

Le problème était que l’un des objets imbriqués dans Foo n’avait aucun getter/setter

150
Marc

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>
14
PAA

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>
5
SkyWalker

Ajoutez le getter/setter manquant dans le bean mentionné dans le message d'erreur.

4
Soumyajit Swain

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!

3
thisisashwani

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.

2
vish213

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.

1
Nilay

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.

0
Lisa

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.

0
Ollie P

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.

0
Vit Ias

L'annotation @EnableWebMvc sur la classe de configuration a résolu mon problème. (Spring 5, pas de fichier web.xml, initialisé par AbstractAnnotationConfigDispatcherServletInitializer)

0
user3636486

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;
}
0
Kiran Kawade