Spring Boot отображение определенного пути на статические ресурсы

Вопрос или проблема

Я начинал серверное приложение (похожие на RestController) и не хотел, чтобы в пути был токен, такой как "/api/". Поэтому мой контроллер перехватывает все, включая запросы к ресурсам ;-(

Существует ли способ определить шаблон, такой как "/content/**", который всегда будет рассматриваться как запрос к ресурсу и никогда не будет направлен в мои контроллеры?

Обновление 9.10. 13:49

Это, возможно, дублирует эту тему. Но если я добавлю

spring:
  mvc.static-path-pattern: /content/**

в мой application.yml, запрос https://example.com/content/index.html все равно будет направлен в @Controller вместо моего статического ресурса.

Ответ или решение

Чтобы правильно настроить маршрутизацию статических ресурсов в Spring Boot, без перенаправления запросов к контроллерам, выполните следующие шаги:

  1. Настройка статических ресурсов: Spring Boot автоматически обслуживает статические ресурсы из определенных каталогов. По умолчанию это src/main/resources/static, src/main/resources/public, src/main/resources/resources, и src/main/resources/META-INF/resources. Если у вас есть статические файлы (например, index.html), разместите их в одном из этих каталогов.

  2. Настройка маршрутов для статических ресурсов: В вашем application.yml необходимо указать шаблон маршрутов для статических ресурсов. Однако, используя настройку spring.mvc.static-path-pattern, необходимо учитывать, что она определяет только путь к ресурсам. Чтобы указать, что запросы к служебному ресурсу /content/** не должны обрабатываться контроллерами, вам понадобится дополнительно настроить маршрутизацию.

Вот пример того, как настроить файл application.yml:

spring:
  mvc:
    static-path-pattern: /content/**
  1. Служебный контроллер для обработки статических ресурсов:

Если ваш контроллер по умолчанию обрабатывает запросы, вы можете создать контроллер, который будет игнорировать путь /content/**. Оберните ваш контроллер в настройку для игнорирования этого пути:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class StaticResourceController {

    @RequestMapping("/content/**")
    public String redirect() {
        return "forward:/content";
    }
}

Также обратите внимание, что если вам нужно обслуживать статические файлы, такие как index.html, которая находится в каталоге /content, то примите во внимание структуру каталогов.

  1. Проверьте структуру каталогов: Убедитесь, что вы правильно разместили файлы вашей статической страницы (например, index.html) в следующем пути:

    src/main/resources/static/content/index.html

    Тогда запрос на https://example.com/content/index.html будет обрабатывать этот файл напрямую.

  2. Отключение Spring MVC от обработки определенных маршрутов: Если у вас нет необходимости обрабатывать определенные маршруты контроллерами, вы можете использовать @Controller только для необходимых маршрутов или использовать аннотацию @RequestMapping с точно определенными маршрутами в контроллерах.

Следуя данным шагам, вы сможете настроить маршрутизацию статических ресурсов так, чтобы она не конфликтовала с контроллерами, обеспечивая корректную обработку запросов к статическим файлам.

Оцените материал
Добавить комментарий

Капча загружается...