wake-up-neo.com

So geben Sie JSON-Daten mit @ResponseBody vom Feder-Controller zurück

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.

43
Zahid Khan

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

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.

83
LynAs

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) )
9
ashirman

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.

6
user5807826

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

3
Rudziankoŭ

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.

1
Arvind Maurya

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.

0
IsidroGH