Как обслуживать одностраничное приложение в Spring Boot? - PullRequest
1 голос
/ 11 июля 2020

Я пытаюсь сделать что-то очень простое в Spring Boot:

  1. Обслуживать мои вызовы api из / api
  2. Обслуживать одностраничное приложение, расположенное в 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.

Как мне заставить это работать?

...