2015-11-20 3 views
7

J'écris une API REST simple selon le tutoriel Spring-Boot this. Sur mes machines de développement locales (Ubuntu 15.04 et Windows 8.1) tout fonctionne comme un charme.Spring Boot Application: Aucun convertisseur trouvé pour la valeur de retour de type

J'ai un ancien serveur 32 bits Ubuntu 12.04 LTS sur lequel je voulais déployer mon service REST.

Le journal de départ est ok, mais dès que j'envoie une requête GET au point d'extrémité/utilisateur/{id}, je reçois l'erreur suivante:

java.lang.IllegalArgumentException: No converter found for return value of type: class ch.gmazlami.gifty.models.user.User 

Et puis en bas de la stacktrace:

java.lang.IllegalArgumentException: No converter found for return value of type: class java.util.LinkedHashMap 

La pile complète est affichée here.

J'ai regardé dans quelques réponses se rapportant à cette erreur, mais ceux-ci ne semblent pas s'appliquer à mon problème, puisque j'utilise Spring-Boot, aucune config xml que ce soit.

Le contrôleur est affecté:

@RequestMapping(value = "/user/{id}", method = RequestMethod.GET) 
public ResponseEntity<User> getUser(@PathVariable Long id){ 
    try{ 
     return new ResponseEntity<User>(userService.getUserById(id), HttpStatus.OK); 
    }catch(NoSuchUserException e){ 
     return new ResponseEntity<>(HttpStatus.NOT_FOUND); 
    } 
} 

Toute aide serait grandement apprécié. C'est très bizarre puisque les mêmes choses fonctionnent parfaitement sur d'autres machines.

Merci d'avance!

+0

https://stackoverflow.com/questions/41719142/how-to-return-a-set-of-objects-with-spring-boot/46977580 # 46977580 –

Répondre

14

vous devez apporter quelques modifications à votre pom.xml et les fichiers mvc-dispatcher-servlet.xml: Ajouter les dependecies suivantes à votre pom.xml:

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

et mettre à jour votre mvc-répartiteur-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> 
+4

FYI, en utilisant Spring Boot '1.4.0.RELEASE' tout ce dont j'avais besoin était les dépendances. – cbmeeks

2

Cela se produit lorsque vous oubliez l'appel "construire":

return ResponseEntity.status(HttpStatus.BAD_REQUEST); 

devrait être:

return ResponseEntity.status(HttpStatus.BAD_REQUEST).build(); 
10

Ce qui est arrivé à moi, sur une seule ressource (une méthode) et je ne comprenais pas pourquoi. Toutes les méthodes dans les classes dans le même paquet, avec les mêmes annotations, le même appel à ResponseEntity.ok(...) etc.

Mais pas celui-ci.

Il s'est avéré que j'avais pardonné de générer les getters sur ma classe POJO!

Dès que je les avais ajouté cela a fonctionné.

Espérons que cela peut sauver quelqu'un un peu de temps par la suite ...

solution
+1

Cela a résolu mon problème aussi.Si quelqu'un qui suit ce post a encore des problèmes, vérifiez de près votre pointeur POJO; dans mon cas, j'avais un getter inférieur sur une propriété; à la place du cas de chameau attendu: gettargetObject() au lieu de getTargetObject() –