tel./fax: +34 91 675 33 06 [email protected] - www ...€¦ · sobre patines... tenemos las pruebas...

10
Avenida de Castilla,1 - Edificio Best Point - Oficina 21B 28830 San Fernando de Henares (Madrid) tel./fax: +34 91 675 33 06 [email protected] - www.autentia.com Somos su empresa de Soporte a Desarrollo Informático. Ese apoyo que siempre quiso tener... 1. Desarrollo de componentes y proyectos a medida Tecnología Desarrollo Sistemas Gran Empresa Producción autentia Certificación o Pruebas Verificación previa RFP Concurso Consultora 1 Consultora 2 Consultora 3 Equipo propio desarrollo Piloto 3a 3b 1. Definición de frameworks corporativos. 2. Transferencia de conocimiento de nuevas arquitecturas. 3. Soporte al arranque de proyectos. 4. Auditoría preventiva periódica de calidad. 5. Revisión previa a la certificación de proyectos. 6. Extensión de capacidad de equipos de calidad. 7. Identificación de problemas en producción. 3. Arranque de proyectos basados en nuevas tecnologías ¿Qué ofrece Autentia Real Business Solutions S.L? Para más información visítenos en: www.autentia.com Compartimos nuestro conociemiento en: www.adictosaltrabajo.com Gestor portales (Liferay) Gestor de contenidos (Alfresco) Aplicaciones híbridas Tareas programadas (Quartz) Gestor documental (Alfresco) Inversión de control (Spring) BPM (jBPM o Bonita) Generación de informes (JasperReport) ESB (Open ESB) Control de autenticación y acceso (Spring Security) UDDI Web Services Rest Services Social SSO SSO (Cas) Spring MVC, JSF-PrimeFaces /RichFaces, HTML5, CSS3, JavaScript-jQuery JPA-Hibernate, MyBatis Motor de búsqueda empresarial (Solr) ETL (Talend) Dirección de Proyectos Informáticos. Metodologías ágiles Patrones de diseño TDD 2. Auditoría de código y recomendaciones de mejora 4. Cursos de formación (impartidos por desarrolladores en activo)

Upload: others

Post on 02-May-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: tel./fax: +34 91 675 33 06 info@autentia.com - www ...€¦ · sobre Patines... tenemos las pruebas ¿Quieres trabajar en Autentia o que te ayudemos a encontrar un nuevo trabajo?

Avenida de Castilla,1 - Edificio Best Point - Oficina 21B28830 San Fernando de Henares (Madrid)

tel./fax: +34 91 675 33 [email protected] - www.autentia.com

Somos su empresa de Soporte a Desarrollo Informático.Ese apoyo que siempre quiso tener...

1. Desarrollo de componentes y proyectos a medida

TecnologíaDesarrolloSistemas

Gran Empresa

Producción

autentia

Certificacióno Pruebas

Verificación previa

RFP Concurso

Consultora 1

Consultora 2

Consultora 3

Equipo propio desarrolloPiloto

3a

3b

1. Definición de frameworks corporativos.2. Transferencia de conocimiento de nuevas arquitecturas.3. Soporte al arranque de proyectos.4. Auditoría preventiva periódica de calidad.5. Revisión previa a la certificación de proyectos.6. Extensión de capacidad de equipos de calidad.7. Identificación de problemas en producción.

3. Arranque de proyectos basados en nuevas tecnologías

¿Qué ofrece Autentia Real Business Solutions S.L?

Para más información visítenos en: www.autentia.com

Compartimos nuestro conociemiento en: www.adictosaltrabajo.com

Gestor portales (Liferay)Gestor de contenidos (Alfresco)Aplicaciones híbridas

Tareas programadas (Quartz)Gestor documental (Alfresco)Inversión de control (Spring)

BPM (jBPM o Bonita)Generación de informes (JasperReport)ESB (Open ESB)

Control de autenticación y acceso (Spring Security)UDDIWeb ServicesRest ServicesSocial SSOSSO (Cas)

Spring MVC, JSF-PrimeFaces /RichFaces, HTML5, CSS3, JavaScript-jQuery

JPA-Hibernate, MyBatisMotor de búsqueda empresarial (Solr)ETL (Talend)

Dirección de Proyectos Informáticos.Metodologías ágilesPatrones de diseñoTDD

2. Auditoría de código y recomendaciones de mejora

4. Cursos de formación (impartidos por desarrolladores en activo)

Page 2: tel./fax: +34 91 675 33 06 info@autentia.com - www ...€¦ · sobre Patines... tenemos las pruebas ¿Quieres trabajar en Autentia o que te ayudemos a encontrar un nuevo trabajo?

E-mail:

Contraseña:

Inicio Quiénes somos Tutoriales Formación Comparador de salarios Nuestro libro

Charlas Más

Deseo registrarme He olvidado mis datos de acceso

Entrar

Estás en:Inicio Tutoriales Spring + REST + JSON = SOAUI

Catálogo de servicios Autentia

Últimas Noticias

¡¡¡ Alcanzamos los 900

tutoriales !!!

Persiguiendo la felicidad,

haciendo realidad los sueños

Networking sobre Patines...

tenemos las pruebas

¿Quieres trabajar en

Autentia o que te ayudemos a encontrar un nuevo trabajo?

Autentia patrocina un

nuevo Coderetreat

DESARROLLADO POR:

Alejandro Pérez García

Alejandro es socio fundador de Autentia y nuestro experto en J2EE, Linux y optimización de aplicaciones empresariales.

Ingeniero en Informática y Certified ScrumMaster

Si te gusta lo que ves, puedes contratarle para darte ayudate con soporte experto, impartir cursos presenciales en tu empresa o para que realicemos tus proyectos como factoría (Madrid). Puedes encontrarme en Autentia: Ofrecemos servicios de soporte a desarrollo, factoría y formación

Regístrate para votar Share |

Spring + REST + JSON = SOAUI

Creación: 25-09-2010

Índice de contenidos

1. Introducción 2. Entorno

6 Fecha de publicación del tutorial: 2010-09-27

Anuncios Google Spring XML Java JSP Servlet Tutorial

Página 1 de 9Spring + REST + JSON = SOAUI

27/09/2010http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=springRestJson

Page 3: tel./fax: +34 91 675 33 06 info@autentia.com - www ...€¦ · sobre Patines... tenemos las pruebas ¿Quieres trabajar en Autentia o que te ayudemos a encontrar un nuevo trabajo?

en Madrid junto con agilismo.es y Eden

Histórico de NOTICIAS

Últimos Tutoriales

Redescubriendo el Agilismo

CAS: Validador personalizado

Instalación de Ubuntu

Desktop 10.04 LTS 32bits en una máquina virtual con VMWare Workstation

Spring 3 Java Config Style

Reunión Madrid Ágil 21-09-

2010: Estrategias de Branches, y división de una historia en tareas

Últimos Tutoriales del Autor

Redescubriendo el Agilismo

Reunión Madrid Ágil 21-09-

2010: Estrategias de Branches, y división de una historia en tareas

Cacoo, herramienta

colaborativa para hacer diagramas, incluso prototipado de pantallas o UML

Contratos Ágiles y TDD

Ejemplo de arquitectura

3. Configuración 4. El controlador 5. La vista 6. Conclusiones 7. Sobre el autor

1. Introducción

En este tutorial vamos a ver un ejemplo de como hacer con Spring servicios REST donde los parámetros de entrada y salida serán objetos JSON.

REST o RESTful (REpresentational State Transfer) es un tipo de servicios web que no se basan en el estándar SOAP. Una de sus principales ventajas es que son mucho más ligeros ya que requieren muchas menos cabeceras y capas (normalmente un simple GET o POST).

JSON (JavaScript Object Notation) es un formato ligero de intercambio de información (mucho más ligero que el XML) que ese basa en pares de clave valor.

La idea es utilizar estas tecnologías para construir lo que denominaremos SOAUI, es decir una capa de servicios (SOA = Service Oriented Architecture) sobre la que montaremos la interfaz de usuario (UI = User Interface). Con esta arquitectura conseguimos desacoplar completamente la presentación del negocio, de forma que la interfaz la podríamos desarrollar en HTML+JavaScript, o en Flex, o en iPhone, o en Android, o para comunicarme con otro proceso, o ...

Las ventajas de esta arquitectura son claras, y en este tutorial veremos como con Spring va a resultar tremendamente sencillo montar esta arquitectura.

Aquí podéis encontrar todo el código fuente con Maven (compilar con mvn install desde el proyecto “tutorial-parent”), y configurado con HSQLDB y Jetty (ejecutar con mvn jetty:run desde el proyecto “tutorial-rest”).

Una vez levantado el Jetty podéis entrar en la aplicación con un navegador y la URL: http://localhost:8080/autentia-rest-tutorial/rest/provider/

Otras URL que podéis probar:

http://localhost:8080/autentia-rest-tutorial/rest/provider/1: El último numero es el id del provider que queréis mostrar.

http://localhost:8080/autentia-rest-tutorial/rest/provider/names: Devuelve una lista con los nombres de los provider.

Página 2 de 9Spring + REST + JSON = SOAUI

27/09/2010http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=springRestJson

Page 4: tel./fax: +34 91 675 33 06 info@autentia.com - www ...€¦ · sobre Patines... tenemos las pruebas ¿Quieres trabajar en Autentia o que te ayudemos a encontrar un nuevo trabajo?

Síguenos a través de:

propuesta por Autentia

Últimas ofertas de empleo

2010-08-30 Otras - Electricidad -

BARCELONA.

2010-08-24 Otras Sin catalogar -

LUGO.

2010-06-25 T. Información - Analista /

Programador - BARCELONA.

Alejandro Pérez

alejandropga

2. Entorno

El tutorial está escrito usando el siguiente entorno:

Hardware: Portátil MacBook Pro 17' (2.93 GHz Intel Core 2 Duo, 4GB DDR3 SDRAM, 128GB Solid State Drive).

NVIDIA GeForce 9400M + 9600M GT with 512MB•

Sistema Operativo: Mac OS X Snow Leopard 10.6.4•

JDK 1.6.0_20•

Maven 2.2.1•

Spring 3.0.4.RELEASE•

3. Configuración

En los pom hemos puesto las dependencias necesarias para usar los jar de Spring (core, web, ...).

En el web.xml podemos destacar lo siguiente:

01 ...02 <context-param>03     <param-name>contextConfigLocation</param-name>04     <param-value>classpath*:applicationContext.xml</param-value>05 </context-param>06 <listener>07     <listener-

class>org.springframework.web.context.ContextLoaderListener</listener-class> 

08 </listener>09   10 ...

How I Learned to Let My Workers Lead: http://ow.ly/2Kewg about 1 hour ago

Ideone, tu compilador online http://www.genbeta.comespeluztacular, XD 9 hours ago

Redescubriendo el agilismo junto a @xav1uzz: http://ow.ly/2K4YU 13 hours ago

If you are embarrassed by code you've written in the past, it's a sure sign you've learned since

Página 3 de 9Spring + REST + JSON = SOAUI

27/09/2010http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=springRestJson

Page 5: tel./fax: +34 91 675 33 06 info@autentia.com - www ...€¦ · sobre Patines... tenemos las pruebas ¿Quieres trabajar en Autentia o que te ayudemos a encontrar un nuevo trabajo?

Join the conversation

Sería la configuración típica de Spring Web, donde vemos como se declara el listener que carga el fichero applicationContext.xml y como se declara el Dispatch Servlet de Spring que atenderá todas las peticiones que empiecen por rest. A este servlet le hemos dado el nombre tutorial, así que Spring buscará un fichero de configuración tutorial-servlet.xml donde pondremos la configuración de la capa web.

En el tutorial-servlet.xml podemos encontrar:

Vemos como se indica que usaremos la configuración por anotaciones y que debe buscar estas anotaciones a partir del paquete com.autentia.tutorial.web.

Luego se define un bean de tipo ContentNegotiationgViewResolver. Este es un resolver de Spring que lo que hace es, en función de las cabeceras de la request o de la extensión que pongamos en la URL determina que tipo de vista es la que tiene que “pintar” el resultado. En este punto es importante destacar como en el defaultViews estamos indicando que la vistas por defecto es el MappingJacksonJsonView. Esta clase se va a encargar de transformar a JSON las respuestas de nuestros métodos.

En el applicationContext.xml no hay nada especial, simplemente la definición del datasource, el transactionalmanager, y los beans de negocio.

11   12 <servlet>13     <servlet-name>tutorial</servlet-name>14     <servlet-

class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 15     <load-on-startup>1</load-on-startup>16 </servlet>17 <servlet-mapping>18     <servlet-name>tutorial</servlet-name>19     <url-pattern>/rest/*</url-pattern>20 </servlet-mapping>21 ...

01 ...02 <mvc:annotation-driven />03   04 <context:component-scan base-package="com.autentia.tutorial.web" /> 05   06 <bean 

class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> 07     <property name="mediaTypes">08         <map> 09             <entry key="html" value="text/html" /> 10             <entry key="json" value="application/json" /> 11         </map> 12     </property> 13     <property name="viewResolvers">14         <list> 15             <bean 

class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 16                 <property name="prefix" value="/WEB-INF/views/" /> 17                 <property name="suffix" value=".jsp" /> 18             </bean> 19         </list> 20     </property> 21     <property name="defaultViews">22         <list> 23             <bean 

class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" /> 24         </list> 25     </property> 26 </bean>27 ...

Página 4 de 9Spring + REST + JSON = SOAUI

27/09/2010http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=springRestJson

Page 6: tel./fax: +34 91 675 33 06 info@autentia.com - www ...€¦ · sobre Patines... tenemos las pruebas ¿Quieres trabajar en Autentia o que te ayudemos a encontrar un nuevo trabajo?

4. El controlador

Aquí es donde está toda la chicha, si es que se le puede llamar “chicha” porque veréis como es extremadamente sencillo.

Podemos ver como la clase se declara como un @Controller de Spring. Y con la anotación @RequestMapping de la línea 02 le estamos diciendo que todas las URL que empiecen por el patrón /provider los atenderá esta clase (para ver algunos ejemplos mirar las URL que aparecen en la introducción de este tutorial).

Luego tenemos una serie de métodos donde vamos afinando el comportamiento del controlador.

En la línea 18 vemos como usamos de nuevo la anotación @RequestMapping, pero en esta ocasión le indicamos mediante el uso de values el patrón de URL que serán atendidos por este método (/provider/names). Y con method le indicamos que este método sólo atenderá las peticiones hechas por GET.

En la línea siguiente usamos @ResponseBody para indicar que el resultado del método lo vuelque en el cuerpo de la respuesta. Como hemos configurado que la vista por defecto es la transformación de JSON, lo que va a pasar es que Spring va a a coger nuestro resultado, lo va a representar en JSON y lo va a escribir en el cuerpo de la respuesta.

01 @Controller02 @RequestMapping("/provider") 03 public class ProviderController {04   05     private final ProviderStore providerStore;06       07     @Inject08     public ProviderController(ProviderStore providerStore) {09         this.providerStore = providerStore; 10     } 11       12     @RequestMapping(method=RequestMethod.GET)13     public String getCreateForm(Model model) { 14         model.addAttribute(new Provider());15         return "provider/createForm";16     } 17   18     @RequestMapping(value="/names", method=RequestMethod.GET)19     public @ResponseBody List<String> getProvidersNames() {20         return providerStore.getProvidersNames();21     } 22   23     @RequestMapping(value="/store", method=RequestMethod.POST)24     public @ResponseBody Long addProvider(@RequestBody Provider 

provider) { 25         final Provider storedProvider = providerStore.sotreProvider

(provider); 26         return storedProvider.getId();27     }   28       29     @RequestMapping(value="/{id}", method=RequestMethod.GET)30     public @ResponseBody Provider getProvider(@PathVariable Long id) { 31         final Provider provider = providerStore.loadProvider(id); 32         if (provider == null) {33             throw new ResourceNotFoundException(id);34         } 35         return provider; 36     } 37 }

Página 5 de 9Spring + REST + JSON = SOAUI

27/09/2010http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=springRestJson

Page 7: tel./fax: +34 91 675 33 06 info@autentia.com - www ...€¦ · sobre Patines... tenemos las pruebas ¿Quieres trabajar en Autentia o que te ayudemos a encontrar un nuevo trabajo?

En la línea 24 aparece la anotación @RequestBody. Con esto estamos indicando a Spring que el cuerpo de la request nos lo pase como parámetro del método. Spring se encargará de convertir el objeto JSON en una instancia de Provider (la clase Provider es un POJO normal y corriente, Spring hará la conversión por introspección).

En la línea 29 y 30 podemos destacar el uso de {id} y la anotación @PathVariable. Con esto estamos indicando que una parte de la URL se tiene que interpretar como una variable, que Spring nos inyectará como un parámetro de nuestro método.

En la línea 33 estamos lanzando una excepción:

En el código de esta excepción, en la línea 1 vemos como gracias a la anotación @ResponseStatus estamos indicando a Spring que cuando se lance esta excepción se mande al cliente un código 404 de recurso no encontrado.

5. La vista

La vista es HTML puro + JavaScript. Se han usado JSPs con taglibs de Spring, pero simplemente por comodidad a la hora de generar el formulario.

En la JSP createForm.jsp se puede ver como se usa JavaScript (jQuery) para hacer la llamada por AJAX y enviar un objeto JSON en la petición.

01 @ResponseStatus(value = HttpStatus.NOT_FOUND) 02 public class ResourceNotFoundException extends RuntimeException {03   04     private static final long serialVersionUID = 4553464302467525828L;05   06     private Long resourceId;07   08     public ResourceNotFoundException(Long resourceId) {09         this.resourceId = resourceId; 10     } 11   12     public Long getResourceId() { 13         return resourceId;14     } 15 }

01 <%@ page session="false" %>02 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 03 <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> 04 <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" 

%> 05   06 <html>07     <head> 08         <title>Create Provider</title>09         <script type="text/javascript" src="<c:url 

value="/scripts/jquery-1.4.min.js" /> "></script> 10         <script type="text/javascript" src="<c:url 

value="/scripts/json.min.js" /> "></script> 11     </head> 12     <body> 13         <div class="container"> 14             <h1> 15                 Create Account 16             </h1> 17             <div class="span-12 last">    18                 <form:form modelAttribute="provider" 

action="provider/store" method="post"> 19                     <fieldset>        20                         <legend>Provider Fields</legend>21                         <p> 

Página 6 de 9Spring + REST + JSON = SOAUI

27/09/2010http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=springRestJson

Page 8: tel./fax: +34 91 675 33 06 info@autentia.com - www ...€¦ · sobre Patines... tenemos las pruebas ¿Quieres trabajar en Autentia o que te ayudemos a encontrar un nuevo trabajo?

22                             <form:label for="name" path="name" cssErrorClass="error">Name</form:label><br/> 

23                             <form:input path="name" /><form:errors path="name" /> 

24                         </p> 25                         <p>   26                             <input id="create" type="submit" 

value="Create" /> 27                         </p> 28                     </fieldset> 29                 </form:form>30             </div> 31         </div> 32         <div id="mask" style="display: none;"></div>33         <div id="popup" style="display: none;">34             <div class="span-8 last"> 35                 <h3>Account Created Successfully</h3>36                 <form> 37                     <fieldset> 38                         <p> 39                             <label for="assignedId">Assigned 

Id</label><br/> 40                             <input id="assignedId" type="text" 

readonly="readonly" />      41                         </p> 42                         <p> 43                             <label 

for="confirmedName">Name</label><br/> 44                             <input id="confirmedName" type="text" 

readonly="readonly" /> 45                         </p> 46                     </fieldset> 47                 </form> 48                 <a href="#" onclick="closePopup

();">Close</a>            49             </div>            50         </div>        51     </body> 52   53     <script type="text/javascript">   54         $(document).ready(function() {55             $("#provider").submit(function() {56                 var account = $(this).serializeObject();57                 $.postJSON("provider/store", account, function(data) { 58                     $("#assignedId").val(data); 59                     showPopup(); 60                 }); 61                 return false;               62             }); 63         }); 64   65         function showPopup() {66             $.getJSON("provider/" + $("#assignedId").val(), function

(provider) { 67                 $("#confirmedName").val(provider.name);68             });         69             $('#popup').fadeIn('fast'); 70             $('#mask').fadeIn('fast'); 71         } 72           73         function closePopup() {74             $('#popup').fadeOut('fast'); 75             $('#mask').fadeOut('fast'); 76             resetForm(); 77         } 78   79         function resetForm() {80             $('#provider')[0].reset(); 81         } 82           83     </script> 84       85 </html>

Página 7 de 9Spring + REST + JSON = SOAUI

27/09/2010http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=springRestJson

Page 9: tel./fax: +34 91 675 33 06 info@autentia.com - www ...€¦ · sobre Patines... tenemos las pruebas ¿Quieres trabajar en Autentia o que te ayudemos a encontrar un nuevo trabajo?

Puedes opinar o comentar cualquier sugerencia que quieras comunicarnos sobre este tutorial; con tu ayuda, podemos ofrecerte un mejor servicio.

Enviar comentarioEnviar comentario

(Sólo para usuarios registrados)

» Registrate y accede a esta y otras ventajas «

Anímate y coméntanos lo que pienses sobre este TUTORIAL:

6. Conclusiones

Esta arquitectura donde la vista está totalmente desacoplada del negocio presenta varias ventajas muy interesante, la primera de ellas es que desde el principio tenemos toda nuestra aplicación orientada a servicios, por lo que resulta muy sencillo usar cualquier tipo de cliente para comunicarnos con el negocio.

Además, gracias a Spring, la implementación es muy sencilla. Por lo que puede ser una tecnología a tener en cuenta para hacer nuestros desarrollos.

7. Sobre el autor

Alejandro Pérez García, Ingeniero en Informática (especialidad de Ingeniería del Software) y Certified ScrumMaster

Socio fundador de Autentia (Formación, Consultoría, Desarrollo de sistemas transaccionales)

mailto:[email protected]

Autentia Real Business Solutions S.L. - "Soporte a Desarrollo"

http://www.autentia.com

COMENTARIOS

Copyright 2003-2010 © All Rights Reserved | Texto legal y condiciones de uso | Banners | Powered by Autentia | Contacto

Página 8 de 9Spring + REST + JSON = SOAUI

27/09/2010http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=springRestJson

Page 10: tel./fax: +34 91 675 33 06 info@autentia.com - www ...€¦ · sobre Patines... tenemos las pruebas ¿Quieres trabajar en Autentia o que te ayudemos a encontrar un nuevo trabajo?

Esta obra está licenciada bajo licencia Creative Commons de Reconocimiento-No comercial-Sin obras derivadas 2.5

Página 9 de 9Spring + REST + JSON = SOAUI

27/09/2010http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=springRestJson