REST JSON son dos acrónimos que cada día se usan más. Estamos ya muy acostumbrados a recibir datos JSON en nuestras aplicaciones AJAX y HTML5 desde el servidor. De hecho se ha convertido en un standard de facto.

REST JSON y Envío
Aunque es cierto que esta forma de trabajar la tenemos ya muy integrada con nuestro negocio. También es bastante cierto que el envío de datos no siempre lo realizamos en JSON. Sin embargo esta práctica cada día se esta imponiendo más debido a que genera homogeneidad en la forma de trabajar con los datos.Hay frameworks como Angular.js que lo tiene completamente integrado.

REST JSON y Java
Vamos a ver como podemos abordar algo de este estilo desde el mundo Java. Para ello nos vamos a apoyar en JQuery y en una petición AJAX sencilla a la cual solicitamos que los datos se envíen en JSON.
var persona={"nombre":"pedro","apellidos":"perez"}; $.ajax({ url: "rest/servicioPersonas/personas", type: "POST", data: JSON.stringify(persona), contentType: "application/json", complete: resultado }); &amp;nbsp;Una vez hecho esto tendremos que configurar un servicio REST para que pueda consumir datos en formato JSON. Para ello voy a utilizar <a href="http://cxf.apache.org/">Apache CXF </a> <pre>y configurarlo en un Tomcat7 . Se puede ver como configurarlo en el siguiente artículo</pre> <a title="Apache CXF y REST (Configuración)" href="https://www.arquitecturajava.com/apache-cxf-y-rest/"> Apache CXF Configuración.</a> <pre> Una vez configurado vamos a dar de alta el servicio.package com.arquitecturajava.serviciosexternos; import javax.ws.rs.Consumes; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; @Path("/servicioPersonas/") @Produces("application/json") public class ServicioPersonasJSON { @POST @Path("/personas") @Consumes(MediaType.APPLICATION_JSON) public void addPersona(Persona persona) { System.out.println(persona.getNombre()+ persona.getApellidos()); } }
En este caso el ejemplo es trivial ya que unicamente añadimos la anotación @Consumes y le especificamos que los datos son recibidos en formato JSON una vez lo hemos configurado el framework de JAX-RS se encargará de mapearlos a la clase Persona. En este caso simplemente imprimimos los datos por pantalla.

Vamos a echar un veo a los ficheros de configuración que Apache CXF necesita para este ejemplo en concreto funcione.
web.xml
&lt;dependencies&gt; &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;web-app version="2.5" 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_2_5.xsd"&gt; &lt;listener&gt; &lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt; &lt;/listener&gt; &lt;servlet&gt; &lt;servlet-name&gt;CXFServlet&lt;/servlet-name&gt; &lt;servlet-class&gt;org.apache.cxf.transport.servlet.CXFServlet&lt;/servlet-class&gt; &lt;load-on-startup&gt;1&lt;/load-on-startup&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;CXFServlet&lt;/servlet-name&gt; &lt;url-pattern&gt;/rest/*&lt;/url-pattern&gt; &lt;/servlet-mapping&gt; &lt;/web-app&gt; &amp;nbsp;
applicationContext.xml
&lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxrs="http://cxf.apache.org/jaxrs" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd"> &lt;import resource="classpath:META-INF/cxf/cxf.xml" /&gt; &lt;import resource="classpath:META-INF/cxf/cxf-servlet.xml" /&gt; &lt;jaxrs:server id="servicioRest" address="/"&gt; &lt;jaxrs:serviceBeans&gt; &lt;bean class="com.arquitecturajava.serviciosexternos.ServicioPersonasJSON" /&gt; &lt;/jaxrs:serviceBeans&gt; &lt;jaxrs:providers&gt; &lt;ref bean="jsonProvider"/&gt; &lt;/jaxrs:providers&gt; &lt;jaxrs:features&gt; &lt;/jaxrs:features&gt; &lt;/jaxrs:server&gt; &lt;bean id="jsonProvider" class="org.codehaus.jackson.jaxrs.JacksonJsonProvider"/&gt; &lt;/beans&gt;
no
Una pregunta un poco fuera de tema, pero ya que lo veo acá pues… 🙂
El papel de las anotaciones en este ejemplo es meramente, que el CXF identifique a la clase que cumple las caracteristicas de la petición ?
[…] REST JSON y Java […]
[…] artículos relacionados: JAXRS-Client y JSON , REST JSON y Java ,JavaScript y […]
Hola que tal muy buen aporte. Una pregunta actualmente quiero incursionar en servicios REST ya eh comprendido como funciona, de echo me he bajado tu libro Arquitectura Java excelente muchas gracias por el aporte, tendrás uno escrito sobre servicios rest y la creación de ellos ? Eh estado investigando pero no eh encontrado uno que traiga ejemplos como tu libro publicado.
Gracias.
Saludos.
No que yo conozca en castellano 🙁
los servicios REST solo se pueden utilizar para sistemas que no requieran session? o estoy equivocado, en caso de ser así como puedo implementar validación por session en una aplicación web donde su lógica corre mediante la implementación de servicios? Gracias
Implementando un proveedor de seguridad que la autenticación la haga contra un servicio rest .Tanto JAAS como Spring security soportan extensiones de proveedores de seguridad
Hola!!, en que proyecto de la lista de Código Fuente esta el ejemplo? Saludos
no esta 🙁 .El codigo fuente es de unos ejemplos de mi libro de java
Saludos. Sus ejemplos están hechos usando Spring? Es que yo no utilizo Spring. Como herramienta utilizo Netbeans y los ManagedBeans los creo con base en clases de Java y anotaciones, no configuro los beans en archivos xml y normalmente no me preocupo por las dependencias (almenos manualmente). Qué tan diferente sería esta implementación en mi entorno de trabajo?
Hablando sobre este artículo y “Apache CXF y REST”
pues no sabría decirte exactamente cada entorno es un mundo .Pero date cuenta que los managedbean estan muy ligados a jsf
El archivo applicationContext.xml es propio de una aplicación de servicios de Apache CXF? o pertenece a la configuración de Spring?
Saludos qué es un “veo” ?
–“Vamos a echar un veo”
es una expression echa es similar a “vamos a mirar” 🙂
No conocía apache cfx. Por que elegirlo frente a spring por ejemplo? Podrías contar un poco más sobre este framework?
Un saludo
Me apunto la idea para algún artículo posterior 🙂 . Apache CXF tiene la ventaja de que esta orientado a servicios web unicamente. Es un framework especializado 🙂