[英]Returning list using @Responsebody or return ModelAndView from spring controller which one better
[英]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.