使用此代码
@RequestMapping(value = "/bar/foo", method = RequestMethod.GET)
public ResponseEntity<foo> foo() {
Foo model;
...
return ResponseEntity.ok(model);
}
}
我收到以下异常
java.lang.IllegalArgumentException: No converter found for return value of type
我的猜测是,由于杰克逊失踪,该对象无法转换为JSON。我不明白为什么,因为我认为杰克逊是用春季靴子建造的。
然后我尝试将Jackson添加到pom.xml中,但我仍然有同样的错误
<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>
我是否必须更改任何弹簧启动属性才能使其正常工作?
谢谢
答案 0 :(得分:169)
问题是Foo中的一个嵌套对象没有getter/setter
答案 1 :(得分:16)
将以下依赖项添加到您的pom.xml:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.1</version>
</dependency>
答案 2 :(得分:8)
添加错误消息中提到的bean内缺少的吸气剂/设置剂。
答案 3 :(得分:5)
使用@ResponseBody
和getter/setter
。希望它能解决你的问题。
@RequestMapping(value = "/bar/foo", method = RequestMethod.GET)
@ResponseBody
public ResponseEntity<foo> foo() {
并更新您的mvc-dispatcher-servlet.xml
:
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
</mvc:message-converters>
</mvc:annotation-driven>
答案 4 :(得分:3)
我遇到了同样的问题,遗憾的是,它无法通过添加getter方法或添加jackson依赖项来解决。
然后我查看了官方Spring指南,并按照这里给出的示例 - https://spring.io/guides/gs/actuator-service/ - 其中示例还显示了返回对象到JSON格式的转换。
然后我又创建了自己的项目,区别在于这次我还添加了依赖项并构建了插件,这些插件存在于我上面提到的官方Spring Guide示例的 pom.xml 文件中。
修改后的依赖项和XML文件的构建部分看起来像这样!
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
您可以在上面提到的链接中看到相同内容。
神奇地说,至少对我而言,它确实有效。所以,如果你已经用尽其他选择,你可能想尝试一下,就像我一样。
只是旁注,当我在我之前的项目中添加依赖项并且Maven安装和更新项目内容时,它对我不起作用。所以,我不得不再次从头开始制作我的项目。我没有太多关于它的事情,因为我的是一个示例项目,但你也可能想要寻找它!
答案 5 :(得分:3)
问题出现在我的情况下,因为spring框架无法获取嵌套对象的属性。 Getters / Setters是解决问题的一种方式。公开属性是另一个快速而肮脏的解决方案,可以验证这确实是问题。
答案 6 :(得分:2)
在使用Spring Boot 2.2时,我遇到了类似的错误消息,并且在搜索错误消息时遇到了
对于带有预设Content-Type'null'的[class java.util.ArrayList]没有转换器
这里的问题排在最前面,但是这里的所有答案都对我不起作用,所以我认为添加我自己的答案是一个好主意:
我必须将以下依赖项添加到pom.xml
:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
</dependency>
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.11.1</version>
</dependency>
此后,我需要将以下内容添加到WebApplication类中:
@SpringBootApplication
public class WebApplication
{
// ...
@Bean
public HttpMessageConverter<Object> createXmlHttpMessageConverter()
{
final MarshallingHttpMessageConverter xmlConverter = new MarshallingHttpMessageConverter();
final XStreamMarshaller xstreamMarshaller = new XStreamMarshaller();
xstreamMarshaller.setAutodetectAnnotations(true);
xmlConverter.setMarshaller(xstreamMarshaller);
xmlConverter.setUnmarshaller(xstreamMarshaller);
return xmlConverter;
}
}
最后但并非最不重要的是我使用过的@Controller
:
@GetMapping(produces = {MediaType.APPLICATION_XML_VALUE, MediaType. APPLICATION_JSON_VALUE})
@ResponseBody
public List<MeterTypeEntity> listXmlJson(final Model model)
{
return this.service.list();
}
因此,现在我根据请求Accept
标头获得了JSON和XML返回值。
要使XML输出更具可读性(从标记名称中删除完整的包名称),您还可以在实体类中添加以下内容@XStreamAlias
:
@Table("ExampleTypes")
@XStreamAlias("ExampleType")
public class ExampleTypeEntity
{
// ...
}
希望这会帮助其他遇到相同问题的人。
答案 7 :(得分:1)
我长时间遇到同样的问题然后才知道必须使用Object Mapper将对象转换为JSON并将其作为 JSON对象传递
@RequestMapping(value = "/getTags", method = RequestMethod.GET)
public @ResponseBody String getTags(@RequestParam String tagName) throws
JsonGenerationException, JsonMappingException, IOException {
List<Tag> result = new ArrayList<Tag>();
for (Tag tag : data) {
if (tag.getTagName().contains(tagName)) {
result.add(tag);
}
}
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(result);
return json;
}
答案 8 :(得分:1)
@Marc编写的答案也是有效的。但是具体的答案是需要Getter
方法。您甚至不需要Setter
。
答案 9 :(得分:1)
您没有任何getter / setter方法。
答案 10 :(得分:0)
在pom.xml中添加以下依赖项:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.10.1</version>
</dependency>
面临与返回类型相同的问题,因此无法与Foo类的MediaType绑定。添加依赖项后,它就起作用了。
答案 11 :(得分:0)
就我而言,我在响应实体中返回布尔值 并具有:
produces = MediaType.TEXT_PLAIN_VALUE,
当我将其更改为以下
produces = MediaType.APPLICATION_JSON_VALUE
成功了!
我所拥有的例子。
@PostMapping(value = "/xxx-xxxx",
produces = MediaType.APPLICATION_JSON_VALUE,
consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Boolean> yyyy(
答案 12 :(得分:0)
就我而言,我使用的是spring boot,并且遇到类似的错误:
No converter for [class java.util.ArrayList] with preset Content-Type 'null'
证明我有一个
控制器@GetMapping(produces = { "application/xml", "application/json" })
可耻的是我没有在请求中添加Accept
头
答案 13 :(得分:0)
我遇到了同样的问题,但是我正在使用Lombok,而我的UploadFileResponse pojo是一个构建器。
public ResponseEntity<UploadFileResponse>
为解决此问题,我添加了@Getter批注:
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Getter
public class UploadFileResponse
答案 14 :(得分:0)
最近遇到了同样的错误-pojo中有getters / setters,并且所有jackson依赖项都正确地导入了pom中,但是有些人为jackson依赖项“提供了<< scope>”,这引起了问题。从杰克逊依赖项中删除“
答案 15 :(得分:0)
将jackson-databind
依赖项的范围设置为test
时,我看到了相同的错误:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.9</version>
<scope>test</scope>
</dependency>
删除<scope>
行解决了该问题。
答案 16 :(得分:0)
@EnableWebMvc注释解决了我的问题。 (春季5,没有web.xml,由AbstractAnnotationConfigDispatcherServletInitializer初始化)
答案 17 :(得分:0)
一段时间我遇到了相同的错误,我已经验证了所有属性都可以使用getter方法,但仍然遇到了相同的错误。 解决问题使用
配置MVC xml(配置) <mvc:annotation-driven/>
。Spring需要此功能来检测杰克逊的存在并设置相应的转换器。
答案 18 :(得分:0)
在我的情况下,我忘了添加库jackson-core.jar,我只添加了jackson-annotations.jar和jackson-databind.jar。当我添加jackson-core.jar时,它修复了问题。
答案 19 :(得分:0)
我偶然也会遇到这样的错误,在课堂上的不同属性上放了两个@JsonProperty(&#34; some_value&#34;)相同的行