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

Angular 2 com spring MVC java

Boa noite a todos!

Estou fazendo o curso de angularJS 2. Vi algumas aulas e cheguei num momento em que estou perdido por que gostaria de criar uma webapp com back-end em java e o front-end em angular2.

Minhas dúvidas:

1- Como ficaria a estrutura de pastas? Qual padrão utilizar, java ou angular? 2- Crio as minhas annotations direto no meu controller em java. Como ficaria agora?

Minha maior dúvida é como juntar o front e o back em java, já que cada um segue um modelo diferente e em java, a saída é via JSP que renderiza as paginas em HTML no final.

Obrigado.

10 respostas

Olá Wagner! Para fazer isso a melhor prática seria fazer 2 projetos diferentes, independentes um do outro.

Um com o backend em java Outro com o código em javastript do angular.

Cada um deles seria organizado na forma como a linguagem trabalha.

Você não escreveria nenhuma de suas views na aplicação em java, apenas na em angular. Sua aplicação java irá retornar apenas jsons para sua aplicação em angular consumir.

Abraços!

Olá Wagner.

Eu tinha essa dúvida também, onde trabalho eu tenho um sistema onde utilizo AngularJS 1.5.x no front e o back-end é composto por 7 web services em Spring.

Como o Philippe disse, o ideal é você realmente separar. Lembro no ano passado ter perguntado isso para o Flávio, você deve ter em mente que sua API Rest deve expor o endpoint que o Angular vai consumir, da mesma maneira que no curso o back-end é uma API em NODE. Mas não importa, podia ser Spring, Jersey, JAX-RS, JAX-WS, Web API e por ai vai.

O seu front, precisa simplesmente dos endpoint.

Porém, é possivel tambem em um projeto Spring, vc ja ter o front junto. Geralmente utilizamos a pasta src/main/resource. E criamos a pasta static e template.

Mas conselho, separe os projetos fica melhor.

Seu back -end em Spring com as classes Resource anotadas com @RestController e @RequestMapping("/endpoint") p/ expor o endpoint e seus metodos.

Não esqueça, para o Angular consumir devem estar com a anotação @CrossOrigin, por causa do CORS.

Abraços

Obrigado pela resposta.

Neste caso o java ira trabalhar como microservice??

Mas no backend eu utilizo o spring MVC, e nessa caso como ficaria a parte da view? Eu usuario somento o controller e model?? Não irei utilizar as annotations do spring??

Nessa caso, pelo que ententi não irei utilizar JSP, JSTL, EL, etc.. mas, como ficaria a estrutura do projeto? Será um projeto web dinamic mesmo gerenciado pelo maven como está hoje !? Nesse caso seria uma aplicação restfull ??

Desculpa tantas perguntas, mas fiquei perdido nesta parte.

Obrigado.

solução!

Se for utilizar a arquitetura de microservice sim.

Ai vc tem que separar todas as responsabilidade. Por exemplo, você tem um projeto onde tem produtos, pedidos, clientes e etc.

Cada um seria um projeto separado, porém o que acontece é que você tira a complexidade das regras de negocios do projeto grande e coloca ela p/ fora em vários microserviços. No começo é uma maravilha, pois vc desenvolve rapido os microserviços, mas depois o gerenciamento disso, por fora é complicado.

Pensa comigo, cada projeto tem seu banco de dados unico e um tem que conversar com o outro, pois não pode ter um pedido, sem cliente ou produto. Vc entendeu?

Outra coisa é o gerenciamento de autorização e autenticação, pois também deve ser um microserviço a parte.

No back-end em Spring você esquece a view, pois isso é responsabilidade do Angular. Então você vai ter um projeto em Spring e você usou um FatJar ou esta rodando em um TOMCAT ou JETTY da vida, levantou o servidor e ele esta la rodando. Em outro projeto você vai ter o Angular rodando.

Você não vai utilizar JSP, JSTL, nada disso. Uma dica p/ te facilitar a vida, utilize o Spring-Boot. No site:

http://start.spring.io/

Vc vai criar um projeto em Spring, que vai ter a dependencia Web que ja vem com uma Full-Stack para o desenvolvimento web com um container embutido do tomcat e o resto das dependencias que vc vai utilizar, como Spring Data JPA por exemplo e por ai vai.

Importa o projeto p/ sua IDE, e pronto, vc ja tem um starter do seu projeto.

E sim, seria um aplicação Rest, usamos a definição Resful, quando usa API atingi todos os niveis do modelo de maturidade Richardson (Nivel - 0, 1, 2, 3). O último é quando ela expoe os HATEOS.

Ja o Angular, quando estou desenvolvendo com o AngularJS eu utilizo lite-server que ajuda um pouco.

Então pense comigo, você tem em um lugar rodando seu back-end e em outro seu front. Separados e seu front, vai apenas consumir os endpoint que sua API Rest esta expondo.

Pode me ajudar a como criar dois projetos separados, assim um para java e outro para angular, e os dois sub-projetos ficar em um só projeto.

Se liga nisso aqui: https://dzone.com/articles/recipe-for-angular-2-in-a-java-ee-environment

Obrigado.

Vou testar

E aí Guilherme, gostou, serviu?

Diego, obrigado baixei o projeto.

O servidor sobe sem erros mas não consigo ver o projeto no ar.

Criou as tabelas no banco H2.

Mas o intuito é para você abstrair o conceito do desenvolvimento. Ele fez um EAR com 2 projetos. Um para manipulação dos objetos com injeção de dependência usando o CDI, e outro é projeto WEB (Com serviço rest e um cliente). O EAR serve como um container de projetos para fazer o deploy de um único pacote que é gerenciado pelo EAR. Mas você pode fazer algo mais simples: Use o spring boot para gerar um stack de uma aplicação restfull e então você integra ele com o cliente. É simples, acesse: https://start.spring.io/ aqui você seta as configurações do projeto: web, rest(jax-rs), pode inserir um framework de segurança (security), orm(hibernate) usando o JPA e etc... Baixe o projeto e import um existing maven project. Depois crie sua aplicação normalmente e disponibilize os endpoints para a aplicação(angular2) consumir. Eu coloquei ele no src. xD