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.