java - mvc - Cómo devolver datos JSON desde Spring Controller usando @ResponseBody
spring rest ejemplo (7)
Spring versión 4.2.0, Hibernate 4.1.4
Aquí está mi función de
Controller
:
@RequestMapping(value = "/mobile/getcomp", method = RequestMethod.GET)
@ResponseBody
public List<Company> listforCompanies() {
List<Company> listOfCompanies= new ArrayList<Company>();
listOfCompanies = companyManager.getAllCompanies();
return listOfCompanies;
}
Dependencia del mapeador Jackson JSON en
Pom.xml
:
<!-- Jackson JSON Mapper -->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>${jackson.version}</version>
</dependency>
Obteniendo la lista en mi
ArrayList
, pero al regresar se muestra el siguiente error:
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 al ejemplo que estoy siguiendo.
Agregue la siguiente dependencia a su pom.xml:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.0</version>
</dependency>
Cuando me enfrenté a este problema, simplemente puse métodos getter setter y mis problemas se resolvieron.
Estoy usando Spring boot versión 2.0.
En mi caso, estaba usando
jackson-databind-2.8.8.jar
que no es compatible con
JDK 1.6
que necesito usar, por lo que Spring no estaba cargando este convertidor.
Bajé la versión y funciona ahora.
Estaba enfrentando el mismo problema.
No puse
@ResponseBody
desde que estaba usando
@RestController
.
Pero aún así recibí un error porque no puse el método
getter/setter
para la clase Company.
Entonces, después de poner el
getter/setter
mi problema se resolvió.
Estaba usando groovy + springboot y obtuve este error.
Agregar getter / setter es suficiente si estamos usando la siguiente dependencia.
implementation ''org.springframework.boot:spring-boot-starter-web''
Como las clases principales de Jackson vienen con eso.
También debe asegurarse de que el bean devuelto no esté vacío (y Jackson puede serializarlo). En mi caso particular, intenté devolver una instancia de un objeto sin getters y setters y sin ninguna anotación jackson y con campos iguales a nulo. Recibí el siguiente mensaje:
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) )
Teniendo en cuenta la respuesta de @Arpit, para mí funcionó solo cuando agregué dos dependencias de 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>
y configurado, por causa, web.xml
<mvc:annotation-driven/>
.
La respuesta original que me ayudó está aquí: https://.com/a/33896080/3014866