Я пытаюсь сделать что-то очень простое в Spring Boot:
- Обслуживать мои вызовы api из / api
- Обслуживать одностраничное приложение, расположенное в src / main / resources / stati c
Не должно быть так сложно, но этот вопрос задавали десятки раз по-разному, и, похоже, на него нет ответа. Это очень легко сделать в Dropwizard или когда вы напрямую соединяете Джерси и Jetty.
Пока что лучший ответ здесь :
@Configuration
public class WebConfiguration extends WebMvcConfigurerAdapter {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/{spring:\\w+}")
.setViewName("forward:/");
registry.addViewController("/**/{spring:\\w+}")
.setViewName("forward:/");
registry.addViewController("/{spring:\\w+}/**{spring:?!(\\.js|\\.css)$}")
.setViewName("forward:/");
}
}
Проблема при этом вызовы / api / bad_missing_path направляются в SPA, а не в сообщение об ошибке, в котором говорится, что это плохой вызов api. Другая проблема в том, что я этого просто не понимаю. Еще одна проблема заключается в том, что здесь явно упоминаются типы файлов. js и. css, и у меня будет гораздо больше типов, чем это. Я хочу, чтобы все, что начинается с / api, рассматривалось как вызов api, а все, что не начинается с / api, передавалось в каталог / stati c.
Я также пытался смонтировать DefaultServlet на «/ *», но он ничего не поймал, ни с использованием сервера Tomcat по умолчанию, ни когда я переключился на Jetty.
Как мне заставить это работать?