Conteúdo estático no Spring WebFlux

Conteúdo estático no Spring WebFlux

1. Visão geral

Às vezes, temos que veicular conteúdo estático em nossos aplicativos da web. Pode ser uma imagem, HTML, CSS ou um arquivo JavaScript.

Neste tutorial, mostraremos como veicular conteúdo estático usandoSpring WebFlux. Também presumimos que nosso aplicativo da web será configurado usandoSpring Boot.

2. Substituindo a configuração padrão

Por padrão, o Spring Boot exibe conteúdo estático nos seguintes locais:

  • /público

  • /estático

  • /Recursos

  • /META-INF/resources

Todos os arquivos desses caminhos são servidos no caminho/[resource-file-name].

Se quisermos alterar o caminho padrão do Spring WebFlux, precisamos adicionar esta propriedade ao nosso arquivoapplication.properties:

spring.webflux.static-path-pattern=/assets/**

Agora, os recursos estáticos estarão localizados em/assets/[resource-file-name].

Observe que este não funcionará quando a anotação@EnableWebFlux estiver presente.

3. Exemplo de Roteamento

Também é possível servir conteúdo estático usando o mecanismo de roteamento WebFlux.

Vejamos um exemplo de definição de roteamento para servir ao arquivoindex.html:

@Bean
public RouterFunction htmlRouter(
  @Value("classpath:/public/index.html") Resource html) {
    return route(GET("/"), request
      -> ok().contentType(MediaType.TEXT_HTML).syncBody(html)
    );
}

Também podemos fornecer conteúdo estático de locais personalizados com a ajuda deRouterFunction.

Vamos ver como exibir imagens do diretóriosrc/main/resources/img usando o caminho/img/**:

@Bean
public RouterFunction imgRouter() {
    return RouterFunctions
      .resources("/img/**", new ClassPathResource("img/"));
}

4. Exemplo de caminho de recursos da web personalizados

Outra maneira de servir ativos estáticos armazenados em locais personalizados, em vez do caminhosrc/main/resources padrão, é usarmaven-resources-plugine uma propriedade Spring WebFlux adicional.

Primeiro, vamos adicionar o plugin ao nossopom.xml:


    maven-resources-plugin
    3.1.0
    
        
            copy-resources
            validate
            
                copy-resources
            
            
                
                    
                        src/main/assets
                        true
                    
                
                ${basedir}/target/classes/assets
            
        
    

Em seguida, basta definir a propriedade de locais estáticos:

spring.resources.static-locations=classpath:/assets/

Após essas ações, oindex.html estará disponível na URLhttp://localhost:8080/index.html.

5. Conclusão

Neste artigo, aprendemos como veicular conteúdo estático no Spring WebFlux.

Como sempre, o código de amostra apresentado está disponívelover on GitHub.