spring-boot-starter-webflux
(Spring Boot v2.0.0.M2) is already configured like in a spring-boot-starter-web
to serve static content in the static folder in resources. But it doesn't forward to index.html. In Spring MVC it is possible to configure like this:
@Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/").setViewName("forward:/index.html"); }
How to do it in Spring Webflux?
Do it in WebFilter:
@Component public class CustomWebFilter implements WebFilter { @Override public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) { if (exchange.getRequest().getURI().getPath().equals("/")) { return chain.filter(exchange.mutate().request(exchange.getRequest().mutate().path("/index.html").build()).build()); } return chain.filter(exchange); } }
import static org.springframework.web.reactive.function.server.RequestPredicates.GET; import static org.springframework.web.reactive.function.server.RouterFunctions.route; import static org.springframework.web.reactive.function.server.ServerResponse.ok; @Bean public RouterFunction<ServerResponse> indexRouter(@Value("classpath:/static/index.html") final Resource indexHtml) { return route(GET("/"), request -> ok().contentType(MediaType.TEXT_HTML).bodyValue(indexHtml)); }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With