Spring version 4.2.0, Hibernate 4.1.4 Voici ma fonction Controller
:
@RequestMapping(value = "/mobile/getcomp", method = RequestMethod.GET)
@ResponseBody
public List<Company> listforCompanies() {
List<Company> listOfCompanies= new ArrayList<Company>();
listOfCompanies = companyManager.getAllCompanies();
return listOfCompanies;
}
Dépendance du mappeur Jackson JSON dans Pom.xml
:
<!-- Jackson JSON Mapper -->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>${jackson.version}</version>
</dependency>
Obtenir la liste dans ma ArrayList
, mais lors du retour, l'erreur suivante est affichée:
SEVERE: Servlet.service() for servlet [dispatcherServlet] in context with path [/IrApp] threw exception [Request processing failed; nested exception is Java.lang.IllegalArgumentException: No converter found for return value of type: class Java.util.ArrayList] with root cause
Java.lang.IllegalArgumentException: No converter found for return value of type: class Java.util.ArrayList
at org.springframework.util.Assert.isTrue(Assert.Java:68)
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.Java:124)
Lien à l'exemple que je suis.
Ajoutez la dépendance ci-dessous à votre pom.xml:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.0</version>
</dependency>
Je faisais face au même problème. Je n'ai pas mis @ResponseBody
puisque j'utilisais @RestController
. Mais je continuais à avoir une erreur parce que je n’avais pas mis la méthode getter/setter
pour la classe Company. Donc, après avoir mis le getter/setter
, mon problème a été résolu.
Vous devez également vous assurer que le bean renvoyé n'est pas vide (et peut être sérialisé par Jackson). Dans mon cas particulier, j'ai essayé de renvoyer une instance d'objet sans les accesseurs ni les setters, ni aucune annotation jackson ni champs égal à null. J'ai le message suivant:
com.fasterxml.jackson.databind.JsonMappingException:
No serializer found for class com.foo.bar.Baz and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) )
Lorsque je faisais face à ce problème, j’ai simplement mis des méthodes d’application de getter et mes problèmes ont été résolus.
J'utilise la version de démarrage Spring 2.0.
Compte tenu de la réponse de @Arpit, cela ne fonctionnait pour moi que lorsque j'ajoutais deux dépendances de Jackson:
<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 configuré, de cause, web.xml <mvc:annotation-driven/>
.
La réponse originale qui m'a aidé est ici: https://stackoverflow.com/a/33896080/3014866
Dans mon cas, j'utilisais jackson-databind-2.8.8.jar
qui n'est pas compatible avec JDK 1.6
que je dois utiliser pour que Spring ne charge pas ce convertisseur. J'ai déclassé la version et cela fonctionne maintenant.