Контроллер отображения запросов Spring Boot для корневого пути, работающий только с двойной косой чертой
Я занимаюсь разработкой веб-приложения с Spring boot, сервисом отдыха в Джерси и встроенным причалом.
Я несколько дней ломал голову к стене, просто хотел, чтобы запрос: localhost:8082 перенаправил меня на index.html.
мой index.html находится по адресу /resources/static/index.html
Я написал класс контроллера загрузки Spring с помощью @RequestMapping:
@Controller
public class WebConfig extends WebMvcConfigurerAdapter {
@RequestMapping(value = {"","/"}, method = RequestMethod.GET)
public String mainPage(HttpServletRequest request) {
String pathInfo = request.getRequestURI();
return "redirect:index.html;
}
}
Однако, когда я звоню: localhost:8082, он не перенаправляет меня на index.html.
Только когда я звоню с двойной косой чертой: localhost:8082//
Может кто-нибудь мне помочь?
Мой весенний загрузочный класс SpringBootServletInitializer выглядит так:
@Configuration
@EnableAutoConfiguration
@ComponentScan(basePackages = { "com.wfm.api"})
public class Launcher extends SpringBootServletInitializer {
private static ApplicationContext applicationContext = null;
public static void main(String[] args) throws Exception {
String mode = args != null && args.length > 0 ? args[0] : null;
// argument parameters 'stop' that comes from class WindowsServiceLauncher which in lance when starting windows service using procrun
if (applicationContext != null && mode != null && "stop".equals(mode)) {
System.exit(SpringApplication.exit(applicationContext, new ExitCodeGenerator() {
@Override
public int getExitCode() {
return 0;
}
}));
}
else {
SpringApplication app = new SpringApplication(Launcher.class);
applicationContext = app.run(args);
}
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Launcher.class);
}
/**
* Registrating REST Servlet
*/
@Bean
public ServletRegistrationBean jersyServletRegistration() {
ServletRegistrationBean registration = new ServletRegistrationBean(new ServletContainer(),"/pethome/api/rest/*");
Map<String,String> params = new HashMap<String,String>();
params.put(ServletProperties.JAXRS_APPLICATION_CLASS, JersyRestConfigurer.class.getName());
//params.put(ServerProperties.WADL_GENERATOR_CONFIG, WadlGeneratorConfigurer.class.getName());
registration.setInitParameters(params);
return registration;
}
/**
* Define Spring boot Server container , We use Jetty
*/
@Bean
public EmbeddedServletContainerFactory containerFactory() {
final JettyEmbeddedServletContainerFactory jettyEmbeddedServletContainerFactory = new JettyEmbeddedServletContainerFactory() {
@Override
protected JettyEmbeddedServletContainer getJettyEmbeddedServletContainer(Server server) {
return new JettyEmbeddedServletContainer(server);
}
};
jettyEmbeddedServletContainerFactory.addServerCustomizers(new JettyConfigurer());
return jettyEmbeddedServletContainerFactory;
}
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
WebApplicationContext rootAppContext = createRootApplicationContext(servletContext);
if (rootAppContext != null) {
//servletContext.addListener(new MailSenderLoadingListener());
}
else {
this.logger.debug("No ContextLoaderListener registered, as "
+ "createRootApplicationContext() did not "
+ "return an application context");
}
}
}
Спасибо за ваши ответы.
3 ответа
Я нашел проблему.
У меня есть jetty-rewite.xml, и он настроен там:
<Call name="addRule">
<Arg>
<New class="org.eclipse.jetty.rewrite.handler.RewriteRegexRule">
<Set name="regex">/</Set>
<Set name="replacement">/welcome.html</Set>
</New>
</Arg>
</Call>
Поэтому по умолчанию каждый вызов root: localhost:8082 перенаправляется на welcome.html, необходимо изменить его на index.html
По весне 3.0.5 попробуй использовать вот так
@RequestMapping(value={"/", " * "})
Здесь " * " соответствует чему угодно, поэтому он будет обработчиком по умолчанию, если нет других.
В основном в Java, когда вы хотите написать "/", вы должны написать "//". Вы можете попробовать это.
@RequestMapping("//")
Все хорошо со мной. Я надеюсь, что это может помочь вам:)