如何使用@ResponseBody从Spring Controller返回JSON数据
Spring版本4.2.0,Hibernate 4.1.4这里是我的Controller
function:
@RequestMapping(value = "/mobile/getcomp", method = RequestMethod.GET) @ResponseBody public List<Company> listforCompanies() { List<Company> listOfCompanies= new ArrayList<Company>(); listOfCompanies = companyManager.getAllCompanies(); return listOfCompanies; }
jacksonJSON映射器依赖Pom.xml
:
<!-- Jackson JSON Mapper --> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>${jackson.version}</version> </dependency>
获取我的ArrayList
的列表,但是当返回以下错误时显示:
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)
链接到我正在关注的示例。
将下面的依赖项添加到你的pom.xml中:
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.5.0</version> </dependency>
我面临同样的问题。 自从我使用@RestController
以来,我没有放置@RestController
。 但是我仍然因为没有为公司类getter/setter
方法而出错。 所以在把getter/setter
我的问题就解决了。
您还需要确保返回的bean不是空的(并且可以由Jackson序列化)。 在我的特殊情况下,我试图返回一个没有getter和setter的对象的实例,没有任何jackson的注解和字段等于null。 我有下面的消息:
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) )
当我面对这个问题时,我只是简单地把getter setter方法和我的问题解决了。
我正在使用Spring启动版本2.0。
考虑@Arpit的答案,对我来说,它只有当我添加两个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>
并configuration了原因web.xml <mvc:annotation-driven/>
。
帮助我的原始答案在这里: https : //stackoverflow.com/a/33896080/3014866
在我的情况下,我正在使用jackson-databind-2.8.8.jar
与JDK 1.6
不兼容我需要使用,所以spring没有加载这个转换器。 我降级了这个版本,现在可以工作了。