Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

mapeamento de rotas angular + spring

Integrei a aplicação angular com springboot. o conteudo gerado pelo build está indo para a pasta static. A aplicação funciona perfeitamente. Quando acesso localhost:8080 carrega meu conteudo js e consigo navegar atraves das rotas.

Gostaria de conseguir acessar uma rota externa, por exemplo localhost:8080/cadastro. Como o "/cadastro" não está mapeado pelo spring, recebo uma msg de erro. Como poderia geranciar as rotas e conseguir acessar o conteudo da pagina desejada?

5 respostas

Opa Mauricio, vc quer fazer um request inicial para /cadastro? Isso deveria cair em qual página? Veja se esse post sobre mapeamente de recursos estáticos te ajuda => https://spring.io/blog/2013/12/19/serving-static-web-content-with-spring-boot

não a request inicial. A request inicial cai na home, porem se eu digito uma url mapeada nas rodas do angular, por exemplo o /cadastro não é interpretado pelo angular e sim pelo spring.

localhost:4200/cadastro => abre a pagina ok localhost:8080/cadastro => erro, pois não existe rota mapeada em nenhum @controller do spring.

Tem como eu dizer que rotas digitadas são para serem interpretadas pelo angular e apenas as de api realmente vai no meu @controller.

No angular 1.x conseguia este resultado.

solução!

Consegui resolver configurando resourceHendles no spring.

Opa, pode postar a solução aqui?

Opa. Criei uma classe se configuração que extende do WebMvcConfigurerAdapter.

Nela eu configurei o resourceHandler apontando a pasta onde estou jogando o meu "dist" gerado pelo build do Angular. No handler consigo validar se a url existe ou não e acessar corretamente o conteúdo conforme o desejado.

registry.addResourceHandler("/**").addResourceLocations("classpath:/static/index.html")
        .resourceChain(true).addResolver(new PathResourceResolver() {
            @Override
            protected Resource getResource(final String resourcePath, final Resource location)
                    throws IOException {
                return location.exists() && location.isReadable() ? location : null;
            }
        });

Criei um projeto no github que integra frontend em Angular (atualizado para versão 4) junto com o spring boot. O link do código está logo abaixo.

https://github.com/mauriciolassakoski/angular_2_springboot