Crear un Spring REST Service es ahora muy sencillo a través del uso de la anotación @RestController que Spring 4 soporta. En primer lugar se configura el fichero de pom.xml de Maven con las siguientes dependencias.
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.1.7.RELEASE</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.1.3.Final</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.4.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.4.2</version> </dependency> </dependencies>
El siguiente paso es configurar el Servlet Dispatcher en el web.xml que es el que nos permite mapear todas las urls de los controladores de Spring.
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <servlet> <servlet-name>ServletSpring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/config/applicationContext.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>ServletSpring</servlet-name> <url-pattern>*.html</url-pattern> <url-pattern>*.json</url-pattern> </servlet-mapping> </web-app>
El último paso a nivel de configuración es definir el fichero applicationContext.xml:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/mvc12 http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <mvc:annotation-driven /> <context:component-scan base-package="com.arquitecturajava.controller" /> </beans>
Realizada la configuración será suficiente con crear una clase que use la anotación @RestController y automaticamente se publicara como un Spring REST Service.
package com.arquitecturajava.controller; import java.util.ArrayList; import java.util.List; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import com.arquitecturajava.negocio.Persona; @RestController public class ControladorREST { @RequestMapping(value = "/personas", method = RequestMethod.GET) public List < Persona > listaPersonas() { List < Persona > lista = new ArrayList < Persona > (); Persona p = new Persona(); p.setNombre("angel"); p.setEdad(20); lista.add(p); Persona p1 = new Persona(); p1.setNombre("gema"); p1.setEdad(30); lista.add(p1); return lista; } }
Acabamos de crear un servicio REST que nos devuelve una Persona en una url determinada , concretamente en /personas recordemos que para las url REST normalmente se utilizan los plurales.
Ya solo queda realizar una petición web a la URL en donde se ha mapeado el Spring REST Service:
Conclusiones
introduce novedades que hacen la vida más sencilla a los desarrolladores
Otros artículos relacionados:
Hola Cecilio, baandonos en este ejemplo, tienes algun ejemplo de CRUD completo Restfull ?
Gracias
Es estos momentos no 🙁 , pero me apunto la idea
Line 15 in XML document from ServletContext resource [/WEB-INF/config/applicationContext.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 15; columnNumber: 27; cvc-complex-type.2.4.c: El comodín coincidente es estricto, pero no se ha encontrado ninguna declaración para el elemento ‘mvc:annotation-driven’.
Gracias por compartir Cecilio.
En el namespace
http://www.springframework.org/schema/mvc12
debería ser:
http://www.springframework.org/schema/mvc
yo lo veo como mvc 😕
[…] Otros artículos relacionados:Introducción a Servicios REST , Spring REST Service con @RestController […]
[…] artículos relacionados : Spring Rest Controllers , Servicios […]
[…] controladores de tipo RestController cada día se usan más en el universo de Spring Framework debido al mayor uso de las arquitecturas […]
Hola Cecilio muy interesante. Cuando implementé JSON quise method = RequestMethod.POST para recuperar datos, sin embargo, tuve problemas para implementarlo.
La idea era que la respuesta del JSON no fuera directamente sobre la pagina (@responseBody) pero no me funcionó. Agradecere que compartas tus experiencias…
No se si lo entiendo bien , pero cuando la respuesta es en formato JSON se debe a que normalmente harás la petición vía ajax
Buenas Cecilio. Le ves alguna desventaja a usar esto en ves de Apache cfx? Saludos y gracias por el aporte, solo pensé que se podía usar restController con spring-boot.
Apache CXF es un framework más especializado y hace más cosas. Pero claro es un framework más que añadir al stack. Hoy por hoy Spring a evolucionado y en muchos casos nos podemos ahorrar apache CXF.
Gracias. Justo necesito unos servicios, para una aplicación, que va a recibir una imagen en un servicio post. Tienes experiencia en este tipo de datos? Se que tengo que usar dato binario. Por ahora voy a probar si lo puedo hacer directamente con spring, sino me queda otra, le pondré apache CFX. Es un trabajo académico no al que le puedo dedicar tanto tiempo como quiero, pero ya te diré como va todo.
En principio debería valer con pasarlo por POSt y usar base64 pero no he probado un ejemplo concreto 🙁