Возврат HTML-страницы из контроллера Spring - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть приложение Spring Boot, настроенное как REST API.Теперь я также хочу иметь возможность предоставлять простые HTML-страницы клиенту без использования в любом шаблонном движке, таком как Thymeleaf.Я хочу, чтобы доступ к HTML-страницам попал под те же ограничения безопасности, которые были установлены Spring Security с использованием WebSecurityConfigurerAdapter, уже присутствующего в моем приложении.


Я пытался получить Controller:

@Controller
public class HtmlPageController {
    @RequestMapping(value = "/some/path/test", method = RequestMethod.GET)
    public String getTestPage() {
        return "test.html";
    }
}

и размещение файла test.html в /resources/test.html или /webapp/WEB-INF/test.html.

Каждый раз, когда я пытаюсь получить доступ к странице в localhost:8080/some/path/test a 404возвращается.

Как мне сделать эту работу?

Ответы [ 4 ]

0 голосов
/ 14 ноября 2018

Окей, так что, очевидно, Spring Boot поддерживает это без каких-либо дополнительных настроек или контроллеров.

Все, что мне нужно было сделать, это поместить HTML-файл в правильный каталог /resources/static/some/path/test.html, и он может быть достигнут в localhost:8080/some/path/test.html.

В моих попытках изменить каталог, из которого обслуживается файл, я потерпел неудачу. Кажется, что , предоставляющий отдельный @EnableWebMvc (необходимый для настройки обработчиков ресурсов), нарушает конфигурацию Spring Boot.Но я могу жить с использованием каталога /static по умолчанию.

0 голосов
/ 14 ноября 2018

См. учебный пример , как определить представление HTML в конфигурации Spring MVC

@Bean
public InternalResourceViewResolver htmlViewResolver() {
    InternalResourceViewResolver bean = new InternalResourceViewResolver();
    bean.setPrefix("/WEB-INF/html/");
    bean.setSuffix(".html");
    bean.setOrder(2);
    return bean;
}
  • setOrder установлен в 2, потому что он включает также поддержку JSP в примере

Также вам нужно изменить, чтобы вернуться без .html суффикса

return "test.html";
0 голосов
/ 14 ноября 2018

Существует механизм Spring MVC, который предоставляет статические ресурсы.

В классе config переопределите этот метод:

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry
        .addResourceHandler("some/path/*.html")
        .addResourceLocations("/static/");
}

И поместите html-файлы в папку src/main/webapp/static/.

Если вы запросите some/path/test.html (обратите внимание на .html), он вернет файл test.html, расположенный в папке static.

Очевидно, что вы можете использовать другую папку или более мягкую структуру каталогов.

Таким образом, вам не нужно создавать контроллер. Обратите внимание, что ваш класс конфигурации должен реализовывать WebMvcConfigurer.

0 голосов
/ 14 ноября 2018

Ваши html, js и css файлы должны находиться в каталоге src / main / resources / static.и ваше заявление возврата вы можете попробовать удалить .html.

@RestController
public class HtmlPageController {
    @GetMapping("/some/path/test")
    public String getTestPage() {
        return "test";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...