it-swarm.com.de

java.lang.IllegalArgumentException: Für den Rückgabewert vom Typ wurde kein Konverter gefunden

Mit diesem Code

@RequestMapping(value = "/bar/foo", method = RequestMethod.GET)
    public ResponseEntity<foo> foo() {

        Foo model;
        ...
        return ResponseEntity.ok(model);
    }
}

Ich bekomme die folgende Ausnahme

Java.lang.IllegalArgumentException: No converter found for return value of type

Ich vermute, dass das Objekt nicht in JSON konvertiert werden kann, da Jackson fehlt. Ich verstehe nicht warum, weil ich dachte, dass Jackson in Springstiefel eingebaut wurde.

Dann habe ich versucht, Jackson zur pom.xml hinzuzufügen, aber ich habe immer noch den gleichen Fehler

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

Muss ich irgendwelche Federstiefel-Eigenschaften ändern, damit dies funktioniert?

Vielen Dank

56
Marc

Das Problem war, dass eines der verschachtelten Objekte in Foo keinen getter/setter hatte.

150
Marc

Fügen Sie der pom.xml die folgende Abhängigkeit hinzu:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.8.1</version>
</dependency>
14
PAA

Verwenden Sie @ResponseBody und getter/setter. Ich hoffe, es wird Ihr Problem lösen.

@RequestMapping(value = "/bar/foo", method = RequestMethod.GET)
@ResponseBody
public ResponseEntity<foo> foo() {

und aktualisieren Sie Ihren 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

Fügen Sie den Getter/Setter hinzu, der in der in der Fehlermeldung genannten Bean fehlt.

4
Soumyajit Swain

Ich hatte das gleiche Problem, und leider konnte es nicht durch Hinzufügen von Getter-Methoden oder Hinzufügen von Jackson-Abhängigkeiten gelöst werden.

Ich habe mir dann den offiziellen Spring Guide angesehen und folgte seinem Beispiel wie hier angegeben - https://spring.io/guides/gs/actuator-service/ - wobei das Beispiel auch die Konvertierung des zurückgegebenen Objekts in das JSON-Format zeigt .

Ich habe dann wieder mein eigenes Projekt gemacht, mit dem Unterschied, dass ich dieses Mal auch die Abhängigkeiten und Build-Plugins hinzugefügt habe, die in der Datei pom.xml des offiziellen Spring Guide-Beispiels enthalten sind, das ich oben erwähnt habe.

Die geänderten Abhängigkeiten und der Build-Teil der XML-Datei sehen folgendermaßen aus!

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

Sie können dasselbe im oben genannten Link sehen.

Und für mich funktioniert es magisch. Wenn Sie Ihre anderen Optionen bereits ausgeschöpft haben, möchten Sie dies vielleicht ausprobieren, wie es bei mir der Fall war.

Nur eine Randnotiz, es funktionierte nicht für mich, als ich die Abhängigkeiten in meinem vorherigen Projekt hinzufügte und Maven das Projekt installiert und aktualisiert hatte. Also musste ich mein Projekt von Grund auf neu machen. Ich habe mich nicht viel darum gekümmert, da mein Projekt ein Beispielprojekt ist, aber Sie möchten vielleicht auch danach suchen!

3
thisisashwani

Das Problem trat in meinem Fall auf, weil das Frühlingsgerüst die Eigenschaften verschachtelter Objekte nicht abrufen konnte. Getter/Setter ist eine Lösung. Die Veröffentlichung der Eigenschaften ist eine weitere schnelle und schmutzige Lösung, um zu überprüfen, ob dies tatsächlich das Problem ist.

2
vish213

Ich habe den gleichen Fehler für eine Weile erhalten. Ich hatte überprüft, ob Getter-Methoden für alle Eigenschaften verfügbar waren 

 <mvc:annotation-driven/>

Dies ist erforderlich, damit Spring das Vorhandensein von Jackson erkennen und die entsprechenden Konverter einrichten kann.

1
Nilay

In meinem Fall habe ich vergessen, die Bibliothek jackson-core.jar hinzuzufügen, ich habe nur jackson-annotations.jar und jackson-databind.jar hinzugefügt. Als ich jackson-core.jar hinzufügte, wurde das Problem behoben.

0
Lisa

Ich habe den gleichen Fehler gesehen, als der Umfang der Abhängigkeit von jackson-databind auf test gesetzt wurde:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.9</version>
    <scope>test</scope>
</dependency>

Das Entfernen der <scope> -Zeile behebt das Problem.

0
Ollie P

Ich habe auch einen solchen Fehler erlebt, als aus Versehen zwei @JsonProperty ("some_value") identische Zeilen auf verschiedene Eigenschaften innerhalb der Klasse gesetzt haben

0
Vit Ias

@EnableWebMvc-Anmerkung zur Konfigurationsklasse hat mein Problem behoben. (Frühling 5, keine web.xml, initialisiert mit AbstractAnnotationConfigDispatcherServletInitializer)

0
user3636486

Ich war lange Zeit mit demselben Problem konfrontiert und muss wissen, dass ich mithilfe von Object Mapper ein Objekt in JSON konvertieren und als JSON Object übergeben muss. 

@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