Nota: Soy el líder EclipseLink JAXB (MOXy) y miembro del grupo de expertos JAXB (JSR-222).
¿Puedo crear una clase, hacer anotaciones con las anotaciones JAXB (XML) para el apoyo y declarar en web.xml para (biblioteca de Jackson) el apoyo JSON?
siempre se puede utilizar una clase Application
para especificar un MessageBodyReader
/MessageBodyWriter
para la unión del JSON. Creo que Jackson proporciona una implementación en su jar. A continuación se muestra un ejemplo de una clase Application
que especifica moxy como el proveedor de JSON:
package org.example;
import java.util.*;
import javax.ws.rs.core.Application;
import org.eclipse.persistence.jaxb.rs.MOXyJsonProvider;
public class CustomerApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
HashSet<Class<?>> set = new HashSet<Class<?>>(2);
set.add(MOXyJsonProvider.class);
set.add(CustomerService.class);
return set;
}
}
O necesito para crear por separado dos clases de JSON y XML?
EclipseLink JAXB (moxy) Ofrece vinculante XML nativo y está diseñado para que pueda utilizar el same object model for both JSON and XML.Puede integrarlo en su aplicación JAX-RS utilizando la clase MOXyJsonProvider
:
¿Cómo puedo elegir qué tipo mediante programación para volver (JSON o XML)?
lado del servidor
Puede especificar que el servicio ofrece tanto XML y JSON mensajes utilizando la anotación @Produces
.
@GET
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Path("{id}")
public Customer read(@PathParam("id") long id) {
return entityManager.find(Customer.class, id);
}
Para más información
lado del cliente
Puede utilizar el MediaType para indicar el tipo de mensaje. A continuación se muestra un ejemplo con las API de cliente de Jersey. Tenga en cuenta que la URL es la misma, solo que el tipo de medio solicitado es diferente.
Client client = Client.create();
WebResource resource = client.resource("http://localhost:8080/CustomerService/rest/customers");
// Get XML response as a Customer
Customer customer = resource.path("1")
.accept(MediaType.APPLICATION_XML)
.get(Customer.class);
System.out.println(customer.getLastName() + ", "+ customer.getFirstName());
// Get JSON response as a Customer
Customer customer = resource.path("1")
.accept(MediaType.APPLICATION_JSON)
.get(Customer.class);
System.out.println(customer.getLastName() + ", "+ customer.getFirstName());
Para más información
gracias, pero ¿puedo configurar el tipo de respuesta unsing 'objeto' Response' cuando regrese del método? – MyTitle
La respuesta puede especificar el tipo de contenido: return Response.ok. (...) .type ("aplicación/json"). build(); – mjn
Si eres exigente con las URL como soy ..., podrías usar una extensión de archivo: '/ resources/todo.json' o'/resources/todo.xml' – Webnet