【问题标题】:Spring - RestController dispatcherSpring - RestController 调度程序
【发布时间】:2016-06-09 20:27:42
【问题描述】:

为了让我的基本 rest-api(只有 GET)正常工作,我创建了这个设置:

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">

    <display-name>app</display-name>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

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

    <servlet-mapping>
        <servlet-name>app</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

接下来我有这个 api 控制器:

package packagename.controller.api;

import java.util.concurrent.atomic.AtomicLong;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import packagename.model.Home;

@RestController
public class HomeApiController {

    @RequestMapping("/api/home")
    public Home greeting() {
        return new Home(1, "asdas");
    }

}

以及实际的 Home 模型:

package packagename.model;

public class Home {

    private final long id;
    private final String content;

    public Home(long id, String content) {
        this.id = id;
        this.content = content;
    }

    public long getId() {
        return id;
    }

    public String getContent() {
        return content;
    }
}

当我创建war文件并将其放入我的tomcat服务器的webapps文件夹时,我打开“localhost:8080/webappname/api/home”。

接下来我得到 404 错误,但我不知道为什么。

有人可以帮我完成这个设置吗? 谢谢和问候!

【问题讨论】:

  • 您已经将 Spring Boot 与传统的 Web 应用程序混合在一起。 RestController 就足够了,不需要指定 web.xml。您需要删除 web.xml 并添加依赖项 spring-boot-starter-tomcat 并将其标记为 provided 并将 packaging 更改为 war 并在没有 web.xml 的情况下继续配置 war 插件。
  • 是的,你可以。请在 servlet 设置中使用 /** 而不是 / 作为您的 url-pattern
  • 我添加了这个更改,但还剩下 404 ..

标签: spring api rest http controller


【解决方案1】:

您已将 Spring Boot 与传统 Web 应用程序混合使用。

RestController 就足够了,不需要指定web.xml。

您需要删除 web.xml 并添加依赖项 spring-boot-starter-tomcat 并将其标记为 provided 并将 packaging 更改为 war 并在没有 web.xml 的情况下继续配置 war 插件。

文档http://docs.spring.io/spring-boot/docs/1.4.0.BUILD-SNAPSHOT/reference/htmlsingle/#build-tool-plugins-maven-packaging 可以提供帮助。

如果有任何问题,请告诉我。

【讨论】:

  • 嘿,谢谢您的回答,但是还有一个需要 web.xml 的 web 应用程序......有没有可能让它们(web 应用程序和 RestApi)共存?问候
  • 是的,你可以。请在这个项目中获得战利品:github.com/soiff-spring/spring-mvc-example
  • 你为什么认为这里有引导?他们已经明确表示他们制造了一场战争并部署到了 tomcat。
  • 我的意思是您尝试集成的组件不是目标应用程序。当然我知道你可以在战争项目中使用它。此外,它们是两种可用的方法,我发布了我的建议,我能为您做些什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-10
  • 2017-04-02
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 2014-07-15
  • 1970-01-01
相关资源
最近更新 更多