Служить index.html неявно с Пружинным ботинком

#java #spring #spring-boot #static-files

#java #весна #весенняя загрузка #статические файлы

Вопрос:

У меня есть простое веб-приложение для начальной загрузки Spring. Я хочу обслуживать несколько статических HTML-файлов.

Я знаю, что я мог бы обслуживать статические файлы с помощью Spring Boot, просто поместив их в /static подкаталог my src/main/resources .

Когда я создаю файл (например) /static/docs/index.html , тогда я мог бы получить к нему доступ через http://localhost:8080/docs/index.html .

Чего я хочу добиться, так это получить доступ к этому файлу просто с http://localgost:8080/docs помощью where index.html , который неявно добавляется Spring.

Краткие сведения:

Мне нужно обслуживать статические файлы /static/{path}/index.html в ресурсах через localhost:8080/{path} path.


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

Комментарии:

1. Создать один контроллер, который автоматически сопоставляет их все?

2. Вы нашли способ это сделать?

3. @geschema нет, к сожалению, нет.

Ответ №1:

Это будет работать

 @Configuration
public class AppConfig implements WebMvcConfigurer {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/docs").setViewName("forward:/docs/index.html");
    }
}
  

Или возможное решение для всех статических вложенных файлов (уродливая версия)

 public void addViewControllers(ViewControllerRegistry registry) {
    File file;
    try {
        file = new ClassPathResource("static").getFile();
        String[] names = file.list();

        for(String name : names)
        {
            if (new File(file.getAbsolutePath()   "/"   name).isDirectory())
            {
                registry.addViewController("/"   name).setViewName("forward:/"   name  "/index.html");
            }
        }
    } catch (IOException e) {
        // TODO: handle error
        e.printStackTrace();
    }
}
  

Комментарии:

1. спасибо за ваш ответ, но для этого все равно требуется создать сопоставление для каждого пути.

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