web-dev-qa-db-ja.com

Spring Webflux、index.htmlに転送して静的コンテンツを提供する方法

spring-boot-starter-webflux(Spring Boot v2.0.0.M2)は既にspring-boot-starter-webリソースの静的フォルダーの静的コンテンツを提供します。ただし、index.htmlには転送されません。 Spring MVCでは、次のように構成できます。

@Override
public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/").setViewName("forward:/index.html");
}

Spring Webfluxでそれを行う方法は?

20
Igor Rybak

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);
  }
}
25
Alphaone
7
Brian Clozel
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).syncBody(indexHtml));
}
4
user2071703

WebFlux Kotlin DSL を使用しても同じです:

@Bean
open fun indexRouter(): RouterFunction<ServerResponse> {
    val redirectToIndex =
            ServerResponse
                    .temporaryRedirect(URI("/index.html"))
                    .build()

    return router {
        GET("/") {
            redirectToIndex // also you can create request here
        }
    }
}
0
Manushin Igor