Spring-Version 4.2.0, Hibernate 4.1.4 Hier ist meine Controller
-Funktion:
@RequestMapping(value = "/mobile/getcomp", method = RequestMethod.GET)
@ResponseBody
public List<Company> listforCompanies() {
List<Company> listOfCompanies= new ArrayList<Company>();
listOfCompanies = companyManager.getAllCompanies();
return listOfCompanies;
}
Jackson JSON-Mapper-Abhängigkeit in Pom.xml
:
<!-- Jackson JSON Mapper -->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>${jackson.version}</version>
</dependency>
Abrufen der Liste in meiner ArrayList
, aber bei der Rückgabe wird der folgende Fehler angezeigt:
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)
Link zu dem Beispiel, dem ich folge.
Fügen Sie der pom.xml die folgende Abhängigkeit hinzu:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.0</version>
</dependency>
Ich war mit demselben Problem konfrontiert. Ich habe @ResponseBody
nicht eingegeben, seit ich @RestController
verwendet habe. Trotzdem bekam ich Fehler, weil ich die getter/setter
-Methode nicht für die Company-Klasse eingegeben habe. Nachdem ich den getter/setter
gesetzt hatte, wurde mein Problem behoben.
Sie müssen auch sicherstellen, dass das zurückgegebene Bean nicht leer ist (und von Jackson serialisiert werden kann). In meinem speziellen Fall habe ich versucht, eine Instanz eines Objekts ohne Getter und Setter und ohne Jackson-Anmerkung und mit Feldern gleich null zurückzugeben. Ich habe folgende Nachricht erhalten:
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) )
Als ich mit diesem Problem konfrontiert wurde, habe ich einfach nur Getter-Setter-Methoden eingesetzt, und meine Probleme wurden gelöst.
Ich benutze Spring Boot Version 2.0.
In Anbetracht der Antwort von @Arpit funktionierte es für mich nur, wenn ich zwei Jackson-Abhängigkeiten hinzufüge:
<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>
und konfiguriert, natürlich web.xml <mvc:annotation-driven/>
.
Die ursprüngliche Antwort, die mir geholfen hat, ist hier: https://stackoverflow.com/a/33896080/3014866
Ich habe groovy + springboot benutzt und diesen Fehler bekommen.
Das Hinzufügen von Getter/Setter ist ausreichend, wenn die folgende Abhängigkeit verwendet wird.
implementation 'org.springframework.boot:spring-boot-starter-web'
Da kommen Jackson Kernklassen mit.
In meinem Fall habe ich jackson-databind-2.8.8.jar
verwendet, das nicht mit JDK 1.6
kompatibel ist. Ich muss verwenden, damit Spring diesen Konverter nicht geladen hat. Ich habe die Version heruntergestuft und sie funktioniert jetzt.