terça-feira, 26 de julho de 2016

Spring Tutorial parte II - Consumindo o Web Service Rest com Angularjs

Anteriormente vimos dois tópicos que visam a integração do Spring com Web Service Rest (no back-end) e com Angularjs (no front-end). Considerando que já sabemos como criar um Web Service com Spring e que faça um databind em XML/JSON para retornar um objeto para a camada view, conforme os links abaixo, Vamos então para o consumo do serviço.

http://toxinavirtual.blogspot.com.br/2016/07/databind-com-jackson-e-com-google-json.html

http://toxinavirtual.blogspot.com.br/2016/07/spring-tutorial-parte-i-injecao-de_25.html


Segundo o manual do Spring, temos um exemplo em que uma URL fornece um JSON. O serviço roda na URL abaixo:

http://rest-service.guides.spring.io/greeting

E devolve o seguinte JSON:

{"id":1,"content":"Hello, World!"}

Para criar o projeto no Eclipse, vamos novamente em File>>New>>Other>>Dynamic Web Service e vamos criar um projeto com o nome WSAngularjsRest com a opção de criar web.xml selecionada.

Clicando com o botão direito do mouse sobre o projeto Configure>>Convert to Maven Project e deverá aparecer o arquivo pom.xml.

Vamos adicionar no arquivo as dependências embaixo da tag </build>.

  1.  <properties>
  2.         <spring.version>4.2.1.RELEASE</spring.version>
  3.     </properties>
  4.     <dependencies>
  5.         <!-- javax: XML binding -->
  6.         <dependency>
  7.             <groupId>javax.xml</groupId>
  8.             <artifactId>jaxb-api</artifactId>
  9.             <version>2.1</version>
  10.         </dependency>
  11.         <!-- RESTful web service: Jersey -->
  12.         <dependency>
  13.             <groupId>com.sun.jersey</groupId>
  14.             <artifactId>jersey-server</artifactId>
  15.             <version>1.17.1</version>
  16.         </dependency>
  17.         <dependency>
  18.             <groupId>com.sun.jersey</groupId>
  19.             <artifactId>jersey-servlet</artifactId>
  20.             <version>1.17.1</version>
  21.         </dependency>
  22.         <dependency>
  23.             <groupId>com.sun.jersey</groupId>
  24.             <artifactId>jersey-json</artifactId>
  25.             <version>1.17.1</version>
  26.         </dependency>
  27.         <!-- Unit testing -->
  28.         <dependency>
  29.             <groupId>junit</groupId>
  30.             <artifactId>junit</artifactId>
  31.             <version>3.8.1</version>
  32.             <scope>test</scope>
  33.         </dependency>
  34.         <!-- DEPENDÊNCIAS DO SPRING -->
  35.         <dependency>
  36.             <groupId>org.springframework</groupId>
  37.             <artifactId>spring-core</artifactId>
  38.             <version>${spring.version}</version>
  39.         </dependency>
  40.         <dependency>
  41.             <groupId>org.springframework</groupId>
  42.             <artifactId>spring-web</artifactId>
  43.             <version>${spring.version}</version>
  44.         </dependency>
  45.         <dependency>
  46.             <groupId>org.springframework</groupId>
  47.             <artifactId>spring-webmvc</artifactId>
  48.             <version>${spring.version}</version>
  49.         </dependency>
  50.     </dependencies>


Vamos criar o arquivo index.html dentro da pasta WebContent.

  1. <!doctype html>
  2. <html ng-app>
  3.     <head>
  4.         <title>Hello AngularJS</title>
  5.         <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js"></script>
  6.         <script src="hello.js"></script>
  7.     </head>
  8.     <body>
  9.         <div ng-controller="Hello">
  10.             <p>The ID is {{greeting.id}}</p>
  11.             <p>The content is {{greeting.content}}</p>
  12.         </div>
  13.     </body>
  14. </html>

Repare que o arquivo importa uma biblioteca do Angularjs e importa também um arquivo hello.js que deverá conter o código com o objeto que será impresso na div ng-controller.

Dentro da mesma pasta vamos criar o arquivo hello.js.


  1. function Hello($scope, $http) {
  2.     $http.get('http://rest-service.guides.spring.io/greeting').
  3.         success(function(data) {
  4.             $scope.greeting = data;
  5.         });
  6. }

Repare que existe uma solicitação GET para o Web Service Rest do manual do Spring. Embaixo o objeto é recebido em uma variável que será impresso no index.html.


Vamos agora configurar o arquivo web.xml com o arquivo de chamada.

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  3.   <display-name>WSAngularjsRest</display-name>
  4.   <welcome-file-list>
  5.     <welcome-file>index.html</welcome-file>
  6.    
  7.   </welcome-file-list>
  8.   <!-- . <welcome-file>index.htm</welcome-file>
  9.     <welcome-file>index.jsp</welcome-file>
  10.     <welcome-file>default.html</welcome-file>
  11.     <welcome-file>default.htm</welcome-file>
  12.     <welcome-file>default.jsp</welcome-file>. -->
  13. <servlet>
  14.     <servlet-name>jersey-serlvet</servlet-name>
  15.     <servlet-class>
  16.         com.sun.jersey.spi.container.servlet.ServletContainer
  17.     </servlet-class>
  18.     <init-param>
  19.         <param-name>com.sun.jersey.config.property.packages</param-name>
  20.         <param-value>ngdemo.rest</param-value>
  21.     </init-param>
  22.     <init-param>
  23.         <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
  24.         <param-value>true</param-value>
  25.     </init-param>
  26.     <load-on-startup>1</load-on-startup>
  27. </servlet>
  28. <servlet-mapping>
  29.     <servlet-name>jersey-serlvet</servlet-name>
  30.     <url-pattern>/rest/*</url-pattern>
  31. </servlet-mapping>
  32. <!-- .. -->
  33. </web-app>

Basta rodar o arquivo agora no Tomcat clicando no projeto com o direito Run as>>Tomcat8>>OK.

A página deverá exibir algo como:




Repare que a página retornou os dados do JSON em formato de um objeto numa única variável. Este objeto poderia ser qualquer objeto e poderia ser invocado por diferentes URL. Por exemplo ser fosse um carro ou dados de uma pessoa:

http://rest-service.guides.spring.io/carro

http://rest-service.guides.spring.io/pessoa


Referencias:




Nenhum comentário:

Postar um comentário