404 Page во время работы Spring и angular в том же порту - PullRequest
0 голосов
/ 17 февраля 2020

Я создал приложение Spring boot + angular 8, которое успешно работало в двух разных портах, таких как 8080 и 4200, без каких-либо проблем. Тогда я решил запустить приложение в том же порту (8080). Я запустил ng build --prod и получил папку dist. Переместил эту папку Dist в приложение Spring, и папка выглядела так:

Spring boot application with Angular Dist folder

Соответствующий 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

1 Ответ

0 голосов
/ 17 февраля 2020

Что происходит

При развертывании приложения и копировании ресурсов в папке src/main/ressources вы ожидаете, что Spring представит приложение для вас. Но Spring - это сервер, и как сервер он обслуживает вас с учетом заданной вами конфигурации.

Используя server.servlet.context-path=/api, вы говорите Spring: все будет иметь префикс "/ api" ... Поэтому , если вы попытаетесь запросить: http://localhost:8080/, Spring скажет вам, что ничего не знает о таком URL, потому что для него все должно иметь префикс /api ...

Естественно, вы бы скажем: тогда давайте перейдем к http://localhost:8080/api. Но это не так просто ... Я пока не знаю точно, что происходит, но я думаю, у вас есть индексный файл. html внутри вашего src/main/resources или src/main/resources/public ... и когда вы пытаетесь получить доступ http://localhost:8080/api попытается найти индекс файла. html внутри src/main/resources/{public}/api/index.html ... И не найдет. Отсюда и исключение.

Временное решение

Я столкнулся с аналогичной проблемой с VueJS и Spring Boot. Не теряя слишком много времени, я решил удалить свойства server.servlet.context-path=/api и вручную поставить префикс для моего контроллера с аннотацией @RequestMapping.

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

Это должно сработать, но я не большой поклонник .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...