Primeiras aulas do curso Java EE parte 3: Finalizando sua loja com REST, JMS, JAAS e WebSockets

Java EE parte 3: Finalizando sua loja com REST, JMS, JAAS e WebSockets

Disponibilizando os lançamentos em XML e JSON - Overview

Sejam bem-vindos ao nosso terceiro módulo de Java EE. Neste módulo iremos estudar um pouco mais a fundo o mundo do Java EE, coisas que não vimos nos dois módulos anteriores, que vieram nas especificações do Java EE 7, como por exemplo o WebSockets - será um dos temas mais interessantes desse curso.

Além disso iremos estudar um pouco mais de REST, nos aprofundando um pouco mais, assim como a comunicação assíncrona, JMS, e-mails. Vamos entrar em mais alguns detalhes de segurança, um tema que é muito importante principalmente nos cursos mais extensos, como Java EE e Spring, ou seja, com frameworks ou especificações bem completos.

Vamos mais a fundo também no JSF, que já é bem utilizado como o Facelets. Se você não sabe nada, vai aprender pelo menos o básico para poder estudar.

Serão 5 aulas divididas em vários vídeos. Esperamos que você tenha um ótimo aproveitamento e comaprtilhe conosco seu conhecimento no fórum.

Disponibilizando os lançamentos em XML e JSON - Preparando o ambiente

Vamos agora trabalhar um pouco mais em cima da nossa aplicação web, em que estamos copiando a loja virtual da Casa do Código, a qual tem o objetivo de fazer as vendas do livro. Muitas vezes, além da venda do livro, essas aplicações também precisam fornecer algum tipo de comunicação com sistemas externos, para que saibamos, em sistemas parceiros, quais livros podemos oferecer para a venda em sites de terceiros.

Os livros devem ser enviados através de um serviço de comunicação, em geral serviços REST. No módulo 2 já pudemos ver um pouco disso na hora de fazer a comunicação de pagamento com o Heroku. Porém dessa vez iremos utilizar uma forma nova, onde a comunicação será do nosso sistema para o sistema externo, ou seja, nós que deveremos prover o serviço.

Para começarmos, abrimos a Web Store do Google e pesquisamos "dhc". O DHC é uma extenção do Google Chrome que irá nos ajudar a ter uma comunicação visual com o nosso próprio sistema e até sistemas externos. Vamos adicioná-lo ao Chrome:

adicionando o DHC no Chrome

Uma alternativa ao DHC é o Postman, com o qual conseguimos fazer a mesma simulação. É o que iremos utilizar dessa vez, afinal não é diferente do DHC para tarefas simples, como é o nosso caso.

Na tela inicial do Postman podemos pular o cadastro e irmos direto para o aplicativo:

tela inicial do postman

Está tudo pronto para começarmos a prover nossos serviços.

Disponibilizando os lançamentos em XML e JSON - Disponibilizando livros JSON

Para que nossos serviços sejam expostos de maneira que uma aplicação externa consiga acessar essa lista é disponibilizar os serviços como recursos de nossa aplicação. Para isso criaremos um novo pacote dentro de src/main/java com o nome br.com.casadocodigo.loja.resources. E, como queremos que um recurso externo veja nossos livros, criaremos uma nova classe com o nome LivroResource. Dentro dela que faremos a leitura dos livros. Podem ser os principais, os últimos lançamentos, o que quisermos.

package br.com.casadocodigo.loja.resources;

public class LivroResource {

}

Criemos um método para os últimos lançamentos, pois é o que chama mais atenção:

package br.com.casadocodigo.loja.resources;

public class LivroResource {

    public void ultimosLancamentosJson() {

    }

}

Dentro dele teremos uma Classe que terá a consulta dos últimos lançamentos que já fazemos no DAO. Para isso precisaremos do LivroDao:

package br.com.casadocodigo.loja.resources;

import br.com.casadocodigo.loja.daos.LivroDao;

public class LivroResource {

    private LivroDao dao;

    public void ultimosLancamentosJson() {
        dao.ultimosLancamentos();
    }

}

Porém, se pegarmos esses últimos lançamentos e não obter os objetos e lançá-los para fora do método, eles não servirão para nada. Por isso é interessante que retornemos o resultado da lista de livros:

package br.com.casadocodigo.loja.resources;

import br.com.casadocodigo.loja.daos.LivroDao;
import br.com.casadocodigo.loja.models.Livro;

public class LivroResource {

    private LivroDao dao;

    public List<Livro> ultimosLancamentosJson() {
        return dao.ultimosLancamentos();
    }

}

Com "Ctrl + 1" mudamos o retorno do método. Agora temos um LivroResource com o método ultimosLancamentosJson, no qual pegaremos todos os últimos lançamentos que vêm do banco de dados e retorná-los como JSON. Mas o que torna essa classe um JSON? Onde estão os mapeamentos? Em que caminho eu chamo?

No PagamentoGateway.java temos uma url de pagamento http://book-payment.herokuapp.com/payment. Vamos copiá-la para o Postman e faremos um POST onde no corpo - selecionada a opção raw - passaremos o valor de 500 (lembrando de indicar que o código é em JSON):

post de pagamento no postman

É feito o envio dos dados e retorna o status 201, de criado:

status 201 criado no postman

Temos, então, uma requisição. Perceba que temos um endereço, a url payment, o método POST e o JSON. Precisamos exatamente das mesmas coisas na nossa classe LivroResource com uma url de formato mais completo.

No LivroResource precisaremos informar qual o Path que o nosso usuário poderá atender, importando-o do pacote javax.ws.rs que vem da própria especificação do Java EE para REST, com a anotation @Path, que por sua vez exige um nome de caminho:

package br.com.casadocodigo.loja.resources;

import javaxx.ws.rs.Path

import br.com.casadocodigo.loja.daos.LivroDao;
import br.com.casadocodigo.loja.models.Livro;

@Path("livros")
public class LivroResource {

    private LivroDao dao;

    public List<Livro> ultimosLancamentosJson() {
        return dao.ultimosLancamentos();
    }

}

Esses livros serão carregados em nosso sistema e para isso precisamos do livroDao fazendo @Inject:

@Inject
private LivroDao dao;

E precisaremos publicar esse método. Perceba que "livros" é o recurso completo, mas queremos usar algo mais específico, por exemplo, os últimos lançamentos. Logo usamos o @Path novamente:

@Path("livros")
public class LivroResource {

    @Inject
    private LivroDao dao;

    @Path("lancamentos")
    public List<Livro> ultimosLancamentosJson() {
        return dao.ultimosLancamentos();
    }

}

Os últimos lançamentos (lançamentos) virão através de uma requisição /livros/lançamentos retornando a informação. Para /livros/lancamentos ainda temos que definir qual será o método (GET, POST, PUT, etc) HTTP. Os principais métodos HTTP são GET, PUT, POST e DELET, mas existem outros para outros motivos dentro do próprio REST. Então temos a definição que os últimos lançamentos serão chamados por um GET:

@GET
@Path("lancamentos")
public List<Livro> ultimosLancamentosJson() {
    return dao.ultimosLancamentos();
}

Estamos falando que serão os últimos lançamentos carregados em JSON. Como faremos para que eles sejam retornados em JSON? Precisaremos configurar que queremos produzir (Produce do javax.ws.rs) direto de um array:

@GET
@Path("lancamentos")
@Produces({MediaType.APPLICATION_JSON})
public List<Livro> ultimosLancamentosJson() {
    return dao.ultimosLancamentos();
}

Agora temos nossos últimos lançamentos sendo transformados em JSON e sendo retornados para nosso usuário. Vamos testar para ver se, de fato, está tudo funcionando. Com o projeto salvo, reiniciamos o Wildfly e no Postman testaremos via GET a requisição que criamos com os seguintes valores pro header:

GET de lançamentos com o header aceitando json

Fazendo o envio podemos perceber que recebemos uma resposta com o JSON dos últimos lançamentos. Nosa configuração funcionou! E tudo isso está acontecendo devido à preconfiguração do JAX-RS de autoconversão.

Mas será que o JSON é o único formato que serve para configuração? Será que é interessante que nossa loja retorne mais de um tipo de formato como XML?

Sobre o curso Java EE parte 3: Finalizando sua loja com REST, JMS, JAAS e WebSockets

O curso Java EE parte 3: Finalizando sua loja com REST, JMS, JAAS e WebSockets possui 258 minutos de vídeos, em um total de 56 atividades. Gostou? Conheça nossos outros cursos de Java em Programação, ou leia nossos artigos de Programação.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Java acessando integralmente esse e outros cursos, comece hoje!

  • 1112 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

Premium

  • 1112 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$75
à vista R$900
Matricule-se

Premium Plus

  • 1112 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$100
à vista R$1.200
Matricule-se

Max

  • 1112 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$120
à vista R$1.440
Matricule-se
Procurando planos para empresas?
Acesso por 1 ano
Estude 24h/dia onde e quando quiser
Novos cursos toda semana