遵循 Spring 5 webmvc Rest 服务指南 - 未找到 return 类型值的转换器

Following Spring 5 webmvc Rest service guide - No converter found for return value of type

我关注 the official guide for Building a RESTful Web Service 来自 Spring.io

简而言之,我遵循上述指南,但使用 Tomcat 进行部署和执行。

我查看了有关此问题的一些 SO 问题和答案。 Spring 引导应用程序:找不到 return 类型值的转换器

和其他一些人。

我在 Greeting class 中有 getter 方法,尽管我没有 setter。这正是 class 指南中的内容。

我尝试在 pom.xml 上添加 fasterxml json 依赖项,但错误消息是一样的。

除了应用程序是由 dispatch-servlet.xml 而不是 main 方法引导之外,我的所有设置都与指南完全相同。

web.xml

    <servlet>
    <servlet-name>greeting</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>greeting</servlet-name>
    <url-pattern>/greeting/*</url-pattern>
  </servlet-mapping>

问候语-servlet.xml

<context:component-scan base-package="com.test" />

就是这样。所有其他 classes 都与指南完全相同。使用@RestController 而没有使用@ResponseBody,因为根据指南本身,使用@Controller 和@ResponseBody 推出了@RestController。

这是我的错误信息。

WARNING: Failed to write HTTP message: org.springframework.http.converter.HttpMessageNotWritableException: No converter found for return value of type: class com.test.Greeting

我不认为这是 getters 的问题(我肯定有)。 也不是没有 fasterxml 依赖项的问题。

我错过了什么?

你绝对需要main方法:

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

@SpringBootApplication 注释的功能超出您的想象。最重要的是它调用了@EnableAutoConfiguration。这用于确定您在项目中执行的其他依赖项。在您的情况下,注释会将 Jackson 配置为将您的 Java 对象解析为 JSON.

直接来自 Java文档:

Enable auto-configuration of the Spring Application Context, attempting to guess and configure beans that you are likely to need. Auto-configuration classes are usually applied based on your classpath and what beans you have defined. For example, If you have tomcat-embedded.jar on your classpath you are likely to want a TomcatEmbeddedServletContainerFactory (unless you have defined your own EmbeddedServletContainerFactory bean).


如果您仍然认为创建 war 文件是个好主意,请检查 this 是否可以帮助您使用纯 Spring.

设置 Jackson


编辑:如何 运行 Spring 在没有 Tomcat 的情况下启动
你可以 check this out,文档说这样做:

    ..
    <packaging>war</packaging> 
    ..

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>

理论上你应该可以开始了,但事实可能并非如此,所以请查看 sample project from Spring

这些人也遇到了一些问题,所以check out if it also effects you