servicios servicio ejemplo crear consumir consume java web-services json

ejemplo - ¿Cómo expongo los datos en formato JSON a través de un servicio web usando Java?



web service java json (9)

¡Sip! Echa un vistazo a json-lib

Aquí hay un fragmento de código simplificado de mi propio código que envía un conjunto de mis objetos de dominio:

private String getJsonDocumenent(Object myObj) ( String result = "oops"; try { JSONArray jsonArray = JSONArray.fromObject(myObj); result = jsonArray.toString(2); //indent = 2 } catch (net.sf.json.JSONException je) { throw je; } return result; }

¿Hay alguna manera fácil de devolver datos a clientes de servicios web en JSON usando Java? Estoy bien con los servlets, la primavera, etc.


Como ya se mencionó, Jersey (JAX-RS impl) es el marco para usar; pero para el mapeo básico de objetos Java hacia / desde JSON, Tutorial es bueno. A diferencia de muchas alternativas, no utiliza convenciones extrañas de compatibilidad XML, pero lee y escribe JSON limpio que se correlaciona directamente con los objetos. Tampoco tiene problemas con null (hay diferencia entre la entrada faltante y la que tiene nulo), las listas vacías o las cadenas (ambas son distintas de las nulas).

Jackson también trabaja muy bien con Jersey, ya sea usando el proveedor de jar JAX-RS, o incluso solo de forma manual. Del mismo modo, es trivialmente fácil de usar con viejos servlets; solo obtenga flujo de entrada / salida, llame a ObjectMapper.readValue () y .writeValue (), y eso es todo.


He encontrado google-gson convincente. Convierte a JSON y viceversa. http://code.google.com/p/google-gson/ Es muy flexible y puede manejar las complejidades de los objetos de una manera directa. Me encanta su apoyo a los genéricos.

/* * we''re looking for results in the form * {"id":123,"name":thename},{"id":456,"name":theOtherName},... * * TypeToken is Gson--allows us to tell Gson the data we''re dealing with * for easier serialization. */ Type mapType = new TypeToken<List<Map<String, String>>>(){}.getType(); List<Map<String, String>> resultList = new LinkedList<Map<String, String>>(); for (Map.Entry<String, String> pair : sortedMap.entrySet()) { Map<String, String> idNameMap = new HashMap<String, String>(); idNameMap.put("id", pair.getKey()); idNameMap.put("name", pair.getValue()); resultList.add(idNameMap); } return (new Gson()).toJson(resultList, mapType);


He estado usando jaxws-json, para proporcionar servicios web de formato JSON. puedes consultar el proyecto https://jax-ws-commons.dev.java.net/json/ .

es un buen proyecto, una vez que lo levante, descubrirá lo encantador que es.


Hemos estado utilizando Flexjson para convertir objetos Java a JSON y hemos encontrado que es muy fácil de usar. http://flexjson.sourceforge.net

Aquí hay unos ejemplos:

public String searchCars() { List<Car> cars = carsService.getCars(manufacturerId); return new JSONSerializer().serialize(cars); }

Tiene algunas características geniales como deepSerialize para enviar todo el gráfico y no se rompe con las relaciones bidireccionales.

new JSONSerializer().deepSerialize(user);

El formateo de fechas en el lado del servidor a menudo también es útil

new JSONSerializer().transform( new DateTransformer("dd/MM/yyyy"),"startDate","endDate" ).serialize(contract);


Para los servicios web RESTful en Java, también consulte la API de Restlet, que proporciona una abstracción muy potente y flexible para los servicios web REST (servidor y cliente, en un contenedor o independiente), y también se integra muy bien con Spring y JSON.


Para mí, el mejor analizador Java <-> JSON es XStream (sí, realmente estoy hablando de json, no de xml). XStream ya se ocupa de las dependencias circulares y tiene una aplicación api sencilla y poderosa en la que puede escribir sus controladores, convertidores, etc.

Saludos cordiales


Podría valer la pena investigar en Jersey . Jersey hace que sea fácil exponer servicios web relajantes como xml y / o JSON.

Un ejemplo ... comienza con una clase simple

@XmlType(name = "", propOrder = { "id", "text" }) @XmlRootElement(name = "blah") public class Blah implements Serializable { private Integer id; private String text; public Blah(Integer id, String text) { this.id = id; this.text = text; } @XmlElement public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } @XmlElement public String getText() { return text; } public void setText(String value) { this.text = value; } }

Luego crea un recurso

@Path("/blah") public class BlahResource { private Set<Blah> blahs = new HashSet<Blah>(); @Context private UriInfo context; public BlahResource() { blahs.add(new Blah(1, "blah the first")); blahs.add(new Blah(2, "blah the second")); } @GET @Path("/{id}") @ProduceMime({"application/json", "application/xml"}) public Blah getBlah(@PathParam("id") Integer id) { for (Blah blah : blahs) { if (blah.getId().equals(id)) { return blah; } } throw new NotFoundException("not found"); } }

y exponerlo. Hay muchas formas de hacerlo, como usar ServletContainer de Jersey. (web.xml)

<servlet> <servlet-name>jersey</servlet-name> <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>jersey</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping>

Eso es todo lo que necesita hacer ... abra su navegador y vaya a http: // localhost / blah / 1 . Por defecto verá salida XML. Si está utilizando FireFox, instale TamperData y cambie su encabezado de accept a application/json para ver la salida JSON.

Obviamente, hay mucho más, pero Jersey hace que todo eso sea bastante fácil.

¡Buena suerte!