Java 如何使用@ResponseBody从spring控制器返回JSON数据
Spring版本4.2.0,Hibernate 4.1.4 这是我的Java 如何使用@ResponseBody从spring控制器返回JSON数据,java,json,spring,spring-mvc,spring-4,Java,Json,Spring,Spring Mvc,Spring 4,Spring版本4.2.0,Hibernate 4.1.4 这是我的控制器功能: @RequestMapping(value = "/mobile/getcomp", method = RequestMethod.GET) @ResponseBody public List<Company> listforCompanies() { List<Company> listOfCompanies= new ArrayList<Company>
控制器
功能:
@RequestMapping(value = "/mobile/getcomp", method = RequestMethod.GET)
@ResponseBody
public List<Company> listforCompanies() {
List<Company> listOfCompanies= new ArrayList<Company>();
listOfCompanies = companyManager.getAllCompanies();
return listOfCompanies;
}
在myArrayList
中获取列表,但返回时显示以下错误:
SEVERE:Servlet[dispatcherServlet]在路径为[/IrApp]的上下文中的Servlet.service()引发异常[请求处理失败;嵌套异常为java.lang.IllegalArgumentException:未找到类型为class java.util.ArrayList]的返回值的转换器,原因为根本原因
java.lang.IllegalArgumentException:未找到类型为class java.util.ArrayList的返回值的转换器
位于org.springframework.util.Assert.isTrue(Assert.java:68)
位于org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.WriteWithMessageConverterMethodProcessor(AbstractMessageConverterMethodProcessor.java:124)
对于下面的示例。将以下依赖项添加到pom.xml中:
com.fasterxml.jackson.core
杰克逊数据绑定
2.5.0
您还需要确保返回的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) )
我也面临同样的问题。因为我使用的是
@RestController
,所以我没有放置@ResponseBody
。但是我仍然得到了错误,因为我没有为Company类放置getter/setter
方法。因此,在放置了getter/setter之后,我的问题得到了解决。考虑@Arpit-answer,对我来说,只有在添加两个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>
com.fasterxml.jackson.core
当我面对这个问题时,我只是简单地使用getter setter方法,我的问题就解决了
我使用的是Spring boot 2.0版。在我的例子中,我使用的是jackson-databind-2.8.8.jar
,它与我需要使用的JDK 1.6
不兼容,因此Spring没有加载此转换器。我降级了该版本,现在它可以正常工作。我使用groovy+springboot时出现了这个错误
如果我们使用下面的依赖项,添加getter/setter就足够了
随着Jackson核心类的出现。是的,只需添加带有公共修饰符的setter/getter;) 你能发布你的spring配置plz吗?@RafikBELDI mate一切都很好,spring配置不能添加太多有问题的代码,因为它需要描述。我的问题是所有的getter都是私有的。谢谢,@peter。我的getter是包私有的,但它们需要公开。让我有一天,只花了4个多小时,没有人在任何地方提到这一点。添加依赖项是我的关键!谢谢对我来说,依赖也是关键。我想知道为什么他们不把它们写在春天的《如何:也为我工作》一页上!对于路过并总是选择使用最新版本的依赖项而不是此处提到的依赖项的用户,请注意。不要为jackson dependecy使用最新版本!我尝试过2.7.0-rc1,但没有成功。使用2.6.3运行得很好。spring4.x不是这样。只添加getter/setter就足够了。这更多的是一个注释(而不是答案)。只添加getter就足够了。这是正确的答案。一个人不应该添加更多的依赖项。谢谢,这对我来说同样有效。但这真的很重要,这对我来说很有用。在我的例子中,设置公共访问的字段也很有效。是的,这很有效。Spring应该更具体地修复该错误。添加getter和setter现在可以修复这种情况下的问题
implementation 'org.springframework.boot:spring-boot-starter-web'