java-如何使用@ResponseBody从Spring Controller返回JSON数据

春季版本4.2.0,休眠4.1.4这是我的ArrayList函数:

@RequestMapping(value = "/mobile/getcomp", method = RequestMethod.GET)
@ResponseBody
public List<Company>  listforCompanies() {      
    List<Company> listOfCompanies= new ArrayList<Company>();        
    listOfCompanies = companyManager.getAllCompanies();
    return listOfCompanies;
}

ArrayList中的Jackson映射器依赖关系:

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

链接到我正在关注的示例。

Zahid Khan asked 2020-02-29T10:24:28Z
7个解决方案
102 votes

将以下依赖项添加到pom.xml中:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.5.0</version>
</dependency>
Arpit Aggarwal answered 2020-02-29T10:24:51Z
87 votes

我面临着同样的问题。 我没有使用@ResponseBody,因为我正在使用@RestController。但是仍然出现错误,因为我没有将getter/setter方法用于Company类。 因此,在放入getter/setter之后,我的问题得以解决。

LynAs answered 2020-02-29T10:25:13Z
9 votes

您还需要确保返回的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) )
ashirman answered 2020-02-29T10:25:33Z
6 votes

当我面对这个问题时,我只使用了getter setter方法,问题就解决了。

我正在使用Spring Boot版本2.0。

arvind-dhariwal answered 2020-02-29T10:26:00Z
4 votes

考虑到@Arpit答案,对我来说,它仅在添加两个杰克逊依赖项时起作用:

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

并配置了web.xml <mvc:annotation-driven/>

帮助我的原始答案在这里:[https://stackoverflow.com/a/33896080/3014866]

Rudziankoŭ answered 2020-02-29T10:26:29Z
1 votes

我正在使用groovy + springboot并收到此错误。

如果我们使用下面的依赖关系,那么添加getter / setter就足够了。

implementation 'org.springframework.boot:spring-boot-starter-web'

随着Jackson核心课程随之而来。

Arvind Maurya answered 2020-02-29T10:26:58Z
0 votes

就我而言,我使用的是与我需要使用的JDK 1.6不兼容的jackson-databind-2.8.8.jar,因此Spring并未加载此转换器。 我降级了版本,现在可以使用了。

IsidroGH answered 2020-02-29T10:27:18Z
translate from https://stackoverflow.com:/questions/32905917/how-to-return-json-data-from-spring-controller-using-responsebody