xmlrootelement tutorial sirve que para example español ejemplo java json jaxb jax-rs

java - sirve - jaxb tutorial español



Marshall/Unmarshall un JSON a una clase de Java utilizando JAXB (3)

He estado trabajando con Apache Wink y para eso he tenido que usar un proveedor de JSON, como Jettison (un colega ha estado usando Jackson). Escribí los pasos que tomé aquí

Supongo que también necesitarás usar un proveedor JSON. ¿Hay alguna razón para no usar un proveedor de Jackson?

Estoy coordinando con éxito un POJO en JSON usando las anotaciones JAX-RS y JAXB.

El problema es que cuando trato de usar el mismo para desmantelar mi solicitud, no funciona. Por lo que puedo ver en la documentación, JAX-RS puede ordenar automáticamente y deshacer las cadenas de aplicaciones / json de regreso a las clases de Java.

¿Necesito crear mi propio MessageBodyReader para eso, o esto es compatible con el framework sin usar las bibliotecas de Jackson?


Lo he estado haciendo con éxito en RESTEasy. Lo tengo configurado para consumir y producir XML y JSON. Aquí hay un controlador de solicitud:

@POST @Produces(["application/json","application/xml"]) @Consumes(["application/json","application/xml"]) @Path("/create") public Response postCreate( ReqData reqData) { log.debug("data.name is "+ data.getName()); ... return Response.status(Response.Status.CREATED) .entity(whatever) .location(whateverURI) .build(); }

ReqData es un JavaBean, es decir, tiene un constructor predeterminado y tiene setters y getters que encuentra el Marshaller. No tengo ninguna etiqueta JSON especial en ReqData, pero sí tengo @XmlRootElement (name = "data") en la parte superior para las etiquetas XML marshaller y @XmlElement en los setters.

Yo uso beans separados para entrada y salida, pero hasta donde yo sé, puedes usar el mismo bean.

El programa cliente envía la cadena JSON en el cuerpo de entidad de la solicitud y establece los encabezados Context-Type y Accept tanto en "application / json".


Realizar un seguimiento de XML es fácil, pero me tomó un tiempo encontrar la forma de dirigir a JSON. Muy simple después de encontrar la solución sin embargo.

public static String marshalToXml( Object o ) throws JAXBException { StringWriter writer = new StringWriter(); Marshaller marshaller = JAXBContext.newInstance( o.getClass() ).createMarshaller(); marshaller.setProperty( Marshaller.JAXB_FORMATTED_OUTPUT, true ); marshaller.marshal( o, writer ); return writer.toString(); } public static String marshalToJson( Object o ) throws JAXBException { StringWriter writer = new StringWriter(); JAXBContext context = JSONJAXBContext.newInstance( o.getClass() ); Marshaller m = context.createMarshaller(); JSONMarshaller marshaller = JSONJAXBContext.getJSONMarshaller( m ); marshaller.setProperty( Marshaller.JAXB_FORMATTED_OUTPUT, true ); marshaller.marshallToJSON( o, writer ); return writer.toString(); }