Pesquisar este blog

terça-feira, 28 de outubro de 2014

Acessando Webservices com PlayFramework Java com Lambda

O PlayFramework possui uma biblioteca de ajuda para acessar os webservices que torna muito simples a utilização destes serviços. Neste post será mostrado como fazer uma chamada a um webservice JSON de exemplo da internet.

Modificando o build

Esta biblioteca de webservice do play é uma biblioteca a parte e você deverá adicioná-la como dependência do seu projeto. Para aqueles que usam o sbt para administrar o build basta adicionar esta dependencia ao seu projeto:
javaWs
Com isso você terá acesso as classes que fazem requisições a webservices.
O código necessário para se fazer uma chamada a um Webservice é bem simples com o play, veja abaixo:
import play.libs.ws.WSResponse;
import play.libs.ws.WSRequestHolder;
import play.mvc.Controller;
import play.mvc.Result;
import static play.libs.F.Promise;
import play.libs.ws.WS;

public class ClienteController extends Controller {
    public static Promise<Result> getClientes(){
        WSRequestHolder holder = WS.url("http://api.geonames.org/citiesJSON");
        holder.setQueryParameter("north","-50");
        holder.setQueryParameter("south","10");
        holder.setQueryParameter("east","-20");
        holder.setQueryParameter("west","55");
        holder.setQueryParameter("lang","pt");
        holder.setQueryParameter("username","demo");
        Promise<WSResponse> promise = holder.get();
        return promise.map(f -> ok(f.asJson()));
    }
}
É sempre bom lembrar que os imports são muito importantes, vamos começar explicando eles:

 import play.libs.ws.WS;
Será utilizado para realizar as requisições http, uma simples chamada WS.url("string_da_url").get irá executar uma chamada HTTP GET no endereço passado para o método url.
O resultado do método GET é uma promessa de resultado, Promise<Result>, o que é um código assincrono que será executado em background.
Ao realizar uma chamada ao método getClientes a máquina virtual java não ficará esperando a resposta da chamada ao webservice para retornar uma resposta ao cliente. Esta execução será feita em background e assim que a chamada ao método HTTP GET retornar uma resposta, o método map será executado.
Repare que o método map, transforma o WSResponse, em uma resposta Result, com o status http 200 (ok), convertendo em json o resultado, através do método asJson.
Aqui não tratamos erros ocorridos nesta chamada ao webservice.
Todo o conteúdo de classes deste post está localizado neste repositorio

Nenhum comentário:

Postar um comentário