Я следовал довольно стандартной установке, чтобы переопределить обработку ресурсов по умолчанию в Spring Boot, найденную как здесь, так и на других сайтах. Нам нужно переопределить обработку ресурсов по умолчанию, потому что если у нас есть «универсальный» путь (/**
) в одном из наших веб-контроллеров, они имеют приоритет над обработчиком ресурсов и никакие stati c файлы не возвращаются нашим приложением .
К файлу конфигурации я добавил:
spring:
resources:
add-mappings: false
И мой класс выглядит так (в Kotlin):
@Configuration
@EnableWebMvc
@ConditionalOnProperty(
value = ["spring.resources.add-mappings"],
havingValue = "false",
matchIfMissing = false
)
open class MvcStaticConfiguration : WebMvcConfigurer {
override fun addResourceHandlers(registry: ResourceHandlerRegistry) {
registry.setOrder(Ordered.HIGHEST_PRECEDENCE)
.addResourceHandler("/static/**")
.addResourceLocations("classpath:/public/static/")
}
}
Spring Boot нормализует все запросы, поступающие в приложение. Например, /path/to/my/../app
до /path/to/my/app
. Это также верно для stati c файлов (/static/path/../here
до /static/path/here
).
Однако, когда мы отключили обработку ресурсов по умолчанию, нормализация пути для запросов ресурсов больше не работает. Кроме того, похоже, что некоторая обработка ошибок перестала работать, поскольку в ответе об ошибке просочилась полная трассировка стека.
Есть ли способ вернуть все это обратно? Единственное, что нам нужно , - это чтобы ресурсы имели наивысший приоритет, а в идеале все остальное было точно таким же, каким оно было.
Я просмотрел соответствующий исходный код и попытался повторить код, но мне не повезло. Если это сложно или невозможно, есть ли другой способ достичь того, чего мы хотим?