簡體   English   中英

如何使用@ResponseBody 從 spring Controller 返回 JSON 數據

[英]How to return JSON data from spring Controller using @ResponseBody

Spring 4.2.0 版,Hibernate 4.1.4這是我的Controller功能:

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

Pom.xml Jackson JSON 映射器依賴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)

鏈接到我正在關注的示例。

我面臨同樣的問題。 我沒有放置@ResponseBody因為我使用的是@RestController 但是我仍然收到錯誤,因為我沒有為 Company 類放置getter/setter方法。 所以在放置了getter/setter我的問題就解決了。

將以下依賴項添加到您的 pom.xml:

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

您還需要確保返回的 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 Boot 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>

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

幫助我的原始答案在這里: https : //stackoverflow.com/a/33896080/3014866

是的,只需添加帶有 public 修飾符的 setter/getter ;)

我正在使用 groovy+springboot 並收到此錯誤。

如果我們使用以下依賴項,添加 getter/setter 就足夠了。

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

由於傑克遜核心課程隨之而來。

就我而言,我使用的jackson-databind-2.8.8.jar與我需要使用的JDK 1.6不兼容,因此 Spring 沒有加載此轉換器。 我降級了版本,現在可以使用了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM