2015-10-02 21 views
39

Primavera versione 4.2.0, Hibernate 4.1.4 Ecco il mio Controller funzione:Come restituire i dati JSON dal controller molla con @ResponseBody

@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 dipendenza nel Pom.xml:

Ottenere l'elenco nel mio ArrayList, ma quando si restituisce il seguente errore è mostrato:

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 all'esempio che sto seguendo.

+0

puoi pubblicare la tua configurazione di primavera? –

+0

@RafikBELDI mate ogni cosa va bene è la primavera non è in grado di aggiungere troppo codice in questione in quanto richiede una descrizione. –

+6

Il mio problema era che tutti i getter erano privati. –

risposta

95

Aggiungere la dipendenza qui sotto al tuo pom.xml:

<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-databind</artifactId> 
    <version>2.5.0</version> 
</dependency> 
+6

ha reso la mia giornata, ho trascorso solo più di 4 ore e nessuno ha mai menzionato questo ovunque. –

+3

L'aggiunta delle dipendenze è stata la chiave per me! Grazie! –

+2

Anche le dipendenze erano la chiave per me. Mi chiedo perché non li scrivono nella pagina di Spring come: http://docs.spring.io/spring-boot/docs/current/reference/html/howto-spring-mvc.html –

8

È inoltre necessario essere sicuri che Bean restituito non è vuoto (e può essere serializzato da Jackson). Nel mio caso particolare ho provato a restituire un'istanza di un oggetto senza getter e setter e senza alcuna annotazione di jackson e con campi uguale a null. Ho ricevuto il seguente messaggio:

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)) 
+2

Questo è più un commento (non una risposta). – jogo

78

Mi trovavo di fronte allo stesso problema. Non ho inserito @ResponseBody poiché stavo usando @RestController. Ma stavo ancora ricevendo errore perché non ho inserito il metodo getter/setter per la classe Company. Quindi dopo aver inserito il getter/setter il mio problema è stato risolto.

+14

Aggiungere solo il getter era sufficiente. – Pedram

+5

Questa è la risposta corretta. Non si dovrebbero aggiungere più dipendenze. – Rabiees

+0

Grazie lo stesso ha funzionato per me. Ma poco sorprende il fatto che ciò sia davvero importante. –

3

Considerando risposta @Arpit, per me ha funzionato solo quando aggiungo due dipendenze 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> 

e configurato, di causa, web.xml <mvc:annotation-driven/>.

risposta originale che mi ha aiutato è qui: https://stackoverflow.com/a/33896080/3014866

3

Quando stavo affrontando questo problema, ho semplicemente messo appena getter setter ei miei problemi sono stati risolti.

Sto usando Spring Boot versione 2.0.

+0

aggiungendo getter & setter ora risolverà il problema in questo caso – CodeIsLife

0

Nel mio caso stavo usando jackson-databind-2.8.8.jar che non è compatibile con JDK 1.6 Ho bisogno di usare così Spring non stava caricando questo convertitore. Ho eseguito il downgrade della versione e ora funziona.