2016-06-15 23 views
24

Con questo codicejava.lang.IllegalArgumentException: Nessun convertitore trovato per il valore di ritorno di tipo

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

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

ottengo la seguente eccezione

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

La mia ipotesi è che l'oggetto non può essere convertito in JSON perché Jackson è scomparso. Non capisco perché, perché pensavo che Jackson fosse stato costruito con lo stivale a molla.

allora ho provato ad aggiungere Jackson al pom.xml, ma ho ancora lo stesso errore

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

Devo modificare le proprietà di avvio di primavera per fare questo lavoro?

Grazie

+0

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

risposta

71

Il problema era che uno degli oggetti nidificati in Foo non ha avuto alcun getter/setter

+0

Lo stesso è successo a me questo mi ha salvato la vita :) –

+1

ha bisogno solo di getter –

+2

Questo ha risolto anche il mio problema. Se qualcuno continua a ricevere un errore del convertitore, la causa più probabile è che Jackson non riesce a trovare/elaborare i getter necessari. Controlla il tuo getter POJO da vicino! Nel mio caso, ho avuto un getter con un guscio più basso su una proprietà invece del caso del cammello atteso: getmetaTag() invece di getMetaTag() –

3

Usa @ResponseBody e getter/setter. Spero che risolva il tuo problema.

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

e aggiornare il 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> 
+0

è avvio a molla. Non ho un servlet di mvc-dispatcher. Sai se c'è una proprietà per questo? – Marc

+0

Sfortunatamente ResponseBody non funziona – Marc

+0

Usa getter/setter per classe foo – SkyWalker

9

Aggiungere la dipendenza qui sotto al tuo pom.xml:

+0

spring star web starter contiene la dipendenza Jackson come predefinita. – heemin

+0

Sì, ma è necessario sovrascrivere la versione, lì è necessario –

0

Ho anche riscontrato un errore simile quando per errore ho inserito due @JsonProperty ("some_value") linee identiche su proprietà diverse all'interno della classe

2

Ho avuto lo stesso problema e, sfortunatamente, non è stato possibile risolvere aggiungendo metodi getter o aggiungendo dipendenze di jackson.

Ho quindi esaminato la Guida ufficiale della primavera e ho seguito il loro esempio riportato qui - https://spring.io/guides/gs/actuator-service/ - dove l'esempio mostra anche la conversione dell'oggetto restituito nel formato JSON.

Ho quindi realizzato di nuovo il mio progetto, con la differenza che questa volta ho anche aggiunto le dipendenze e compilato i plug-in presenti nel file pom.xml dell'esempio di Guida ufficiale della primavera che ho menzionato sopra.

Le dipendenze modificate e la parte di costruzione del file XML si presenta così!

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

È possibile vedere lo stesso nel link indicato sopra.

E magicamente, almeno per me, funziona. Quindi, se hai già esaurito le tue altre opzioni, potresti provare questo, come è successo a me.

Solo una nota a margine, non ha funzionato per me quando ho aggiunto le dipendenze nel mio progetto precedente e ho fatto installare e aggiornare Maven. Quindi, dovevo di nuovo fare il mio progetto da zero. Non mi sono preoccupato molto di questo perché il mio è un progetto di esempio, ma potresti anche cercarlo!

1

Il problema si è verificato nel mio caso perché il framework di primavera non è stato in grado di recuperare le proprietà degli oggetti nidificati. Getter/Setter è un modo per risolvere. Rendere pubbliche le proprietà è un'altra soluzione rapida e sporca per convalidare se questo è davvero il problema.

0

stavo affrontando stesso problema per lungo tempo poi viene a sapere avere per convertire oggetto in JSON utilizzando Mapper Oggetto e passarla come JSON oggetto

@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

Se si dispone di una nuova domanda, si prega di chiedere facendo clic sul pulsante [Chiedi domanda] (/ domande/chiedere). Includere un collegamento a questa domanda se aiuta a fornire il contesto. – iBug

+0

Questo in realtà non risponde alla domanda. Se hai una domanda diversa, puoi richiederla facendo clic su [Invia domanda] (https://stackoverflow.com/questions/ask). Puoi anche [aggiungere una taglia] (https://stackoverflow.com/help/privileges/set-bounties) per attirare maggiormente l'attenzione su questa domanda una volta che hai abbastanza [reputazione] (https://stackoverflow.com/help/ che cosa è-la reputazione). - [Dalla recensione] (/ recensione/post di bassa qualità/18430112) – soorapadman

Problemi correlati