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:
javaWsCom 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