org.springframework.http.converter.HttpMessageNotWritableException 没有找到类型的返回值的转换器:类
Posted
技术标签:
【中文标题】org.springframework.http.converter.HttpMessageNotWritableException 没有找到类型的返回值的转换器:类【英文标题】:org.springframework.http.converter.HttpMessageNotWritableException No converter found for return value of type: class 【发布时间】:2019-04-08 19:51:37 【问题描述】:我正在使用 Spring-Boot 进行练习,我尝试搜索,但没有找到对我有用的东西。我正在尝试返回转换 POJO 的 JSON,SB 应该自动执行此操作,但它返回:
2018-11-05 13:26:36.090 WARN 1584 --- [nio-8080-exec-1] .wsmsDefaultHandlerExceptionResolver:已解决 [org.springframework.http.converter.HttpMessageNotWritableException:找不到返回值的转换器类型:类 com.example.demo.pelis.Foo]
这是我的 pom.xml:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.0.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
还有我的 POJO:
public class Foo
private String bar;
/**
* @return the bar
*/
public String getBar()
return bar;
/**
* @param bar
* the bar to set
*/
public void setBar(String bar)
this.bar = bar;
控制器:
@RestController
public class PelisController
@GetMapping(value = "/fooPoint")
public Foo fooPoint()
Foo foo = new Foo();
foo.setBar("smthng");
return foo;
我不知道我做错了什么,因为我尝试过 getters/setters 方法,我试图用官方指南中的那个替换我的 pom。没有任何帮助。
【问题讨论】:
什么版本的春天? 抱歉,忘记发了。这是 2.1.0 版本,我使用的是 Java 8。谢谢! 您是否在请求中设置了Accept: application/json
或任何其他Accept:
标头?
是的,例如:curl -X GET --header "Accept: application/json" localhost:8080/fooPoint -v
我创建了一个与您的项目完全相同的项目,并且成功了。一定是别的东西……
【参考方案1】:
我今天刚遇到这个问题,花了几个小时才弄清楚问题是什么。我看到的几乎所有答案都是因为缺少 getter 和 setter,将 fastxml 依赖添加到 pom.xml 中。我已经有了 getter 和 setter,我所遵循的教程不需要那些 pom 更改。
mariotepro 的解决方案让我摆脱了这个问题。他的解决方案隐藏在 cmets 之下,所以我决定将其放在答案中,以便人们在遇到相同情况时可以轻松看到它。
所以是的,重申一下,进入我的 maven 存储库并删除 fastxml 文件夹并重新运行 maven 是解决我的问题的方法。
【讨论】:
【参考方案2】:我认为除了 getter 和 setter 之外,您还需要一个默认的空构造函数,因此只需添加它就可以使其工作。 将它以及 get 和 set 方法添加到所谓的数据类的一种简单方法是使用 Lombok 项目。
一个例子可以在这里找到:
https://github.com/mstine/todo-list/blob/master/src/main/java/io/pivotal/sporing/todos/todolist/TodoItem.java
所以你基本上在 Maven 中添加了依赖,比如:
<!-- For Lombok, data annotations -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
然后你可以使用类中的注解,如 (sn-p):
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*;
@Entity
@Data
@NoArgsConstructor
@Table(name="todo_item")
public class TodoItem
@Id
@GeneratedValue
private Long id;
注释: @数据 和 @NoArgsConstructor 创建 getter、setter 和空构造函数,这样可以节省样板代码,我认为这很简洁:)。
如果您有兴趣,这里有更多信息: https://projectlombok.org/
【讨论】:
以上是关于org.springframework.http.converter.HttpMessageNotWritableException 没有找到类型的返回值的转换器:类的主要内容,如果未能解决你的问题,请参考以下文章
无法序列化“org.springframework.http.ResponseEntity”HazelcastCache
org.springframework.http.converter.HttpMessageConversionException: T
org.springframework.http.MediaType 中的标记字符“/”无效
Not found org.springframework.http.converter.json.MappingJacksonHttpMessageConverter
Spring 一对多关系抛出异常:org.springframework.http.converter.HttpMessageNotWritableException
org.springframework.http.converter.HttpMessageNotWritableException 没有找到类型的返回值的转换器:类