I'm developing a spring backend for a react-based single page application where I'm using react-router for client-side routing.
Beside the index.html page the backend serves data on the path /api/**.
In order to serve my index.html from src/main/resources/public/index.html on the root path / of my application I added a resource handler
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/").addResourceLocations("/index.html");
}
What I want to is to serve the index.html page whenever no other route matches, e.g. when I call a path other than /api.
How do I configure such catch-all route in spring?
Avoid @EnableWebMvc
By default Spring-Boot serves static content in
src/main/resources:Take a look at this and this;
Or keep @EnableWebMvc and override addViewControllers
Did you specify
@EnableWebMvc? Take a look a this: Java Spring Boot: How to map my app root (“/”) to index.html?Either you remove @EnableWebMvc, or you can re-define
addViewControllers:Or define a Controller to catch
/You may take a look a this spring-boot-reactjs sample project on github:
It does what you want using a Controller:
Its
index.htmlis undersrc/main/resources/templates