【问题标题】:404 Page while running Spring and angular in same port在同一端口中运行 Spring 和 Angular 时出现 404 页面
【发布时间】:2020-06-01 02:09:48
【问题描述】:

我创建了 Spring boot + angular 8 应用程序,该应用程序在 8080 和 4200 等两个不同端口成功运行,没有任何问题。然后我决定在同一个端口(8080)上运行应用程序。我跑了ng build --prod 并得到了 dist 文件夹。将该 Dist 文件夹移动到 spring 应用程序中,该文件夹看起来像这个图像

对应的pom.xml如下

  <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>3.0.2</version>
            <configuration>
                  <outputDirectory>${project.build.directory}/target/classes/static/</outputDirectory >
                  <resources>
                      <resource>
                          <directory>${project.build.directory}/fleetManagement/dist/fleetManagement</directory >
                      </resource>
                  </resources>
                <nonFilteredFileExtensions>
                    <nonFilteredFileExtension>woff</nonFilteredFileExtension>
                    <nonFilteredFileExtension>ttf</nonFilteredFileExtension>
                    <nonFilteredFileExtension>woff2</nonFilteredFileExtension>
                    <nonFilteredFileExtension>eot</nonFilteredFileExtension>
                    <nonFilteredFileExtension>swf</nonFilteredFileExtension>
                    <nonFilteredFileExtension>ico</nonFilteredFileExtension>
                    <nonFilteredFileExtension>png</nonFilteredFileExtension>
                    <nonFilteredFileExtension>svg</nonFilteredFileExtension>
                    <nonFilteredFileExtension>jpg</nonFilteredFileExtension>
                    <nonFilteredFileExtension>jpeg</nonFilteredFileExtension>
                </nonFilteredFileExtensions>
            </configuration>
        </plugin>

当我运行应用程序并点击 http://localhost:8080 - 它转到 HTTP 状态 404 - 未找到 但 api 仍在运行,例如 http://localhost:8080/api/vehicles - 从后端提供 json 数据

我的application.properties文件如下,

server.servlet.context-path=/api
server.port=8080

【问题讨论】:

标签: angular spring spring-boot


【解决方案1】:

发生了什么

当部署您的应用程序并将您的资源复制到src/main/ressources 文件夹中时,您会期望 Spring 为您呈现前端应用程序。但是 Spring 是一个服务器,作为一个服务器,它为你提供你给他的配置。

通过使用server.servlet.context-path=/api,您告诉Spring:所有内容都将以“/api”为前缀...因此,如果您尝试请求:http://localhost:8080/,Spring会告诉您它对这样的URL一无所知,因为对于他,一切都应该以/api为前缀...

所以很自然,你会说:那么,让我们访问http://localhost:8080/api。但这并不容易......我还不知道到底发生了什么,但我猜你的src/main/resourcessrc/main/resources/public中有index.html文件......当你尝试访问@987654328 @ 它将尝试在src/main/resources/{public}/api/index.html... 中查找文件 index.html,但它没有找到任何文件。因此例外。

临时解决方案

我在使用 VueJS 和 Spring Boot 时遇到过类似的问题。在不浪费太多时间的情况下,我的解决方案是删除属性server.servlet.context-path=/api 并手动为我的控制器添加注释@RequestMapping

@RestController
@RequestMapping("/api")
public class MyController {
    ...
}

它应该可以解决问题,但我不是忠实粉丝。

【讨论】:

  • 感谢您的快速响应,但该解决方案不起作用。 :(
猜你喜欢
  • 2016-11-02
  • 1970-01-01
  • 1970-01-01
  • 2017-12-17
  • 1970-01-01
  • 1970-01-01
  • 2018-11-18
  • 2016-06-20
  • 2017-01-07
相关资源
最近更新 更多