Nota: Sono il lead EclipseLink JAXB (MOXy) e un membro del gruppo di esperti JAXB (JSR-222).
Posso creare una classe, annotare con annotazioni JAXB (per il supporto XML) e dichiarare in web.xml per (biblioteca Jackson) supporto JSON?
si può sempre utilizzare una classe Application
per specificare un MessageBodyReader
/MessageBodyWriter
per il legame della JSON. Credo che Jackson fornisca un'implementazione nel suo barattolo. Di seguito è riportato un esempio di una classe Application
che specifica Moxy come provider 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;
}
}
Oppure avrei bisogno di creare separatamente due classi per JSON e XML?
EclipseLink JAXB (moxy) offre XML nativo vincolante ed è progettato per consentire di utilizzare il same object model for both JSON and XML.È possibile integrare nella vostra applicazione JAX-RS utilizzando la classe MOXyJsonProvider
:
Come posso scegliere il tipo di programmazione per tornare (JSON o XML)?
Server Side
È possibile specificare che il servizio offre sia i messaggi JSON utilizzando il @Produces
annotazioni XML e.
@GET
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Path("{id}")
public Customer read(@PathParam("id") long id) {
return entityManager.find(Customer.class, id);
}
Per ulteriori informazioni
lato client
È possibile utilizzare il MediaType per indicare il tipo di messaggio. Di seguito è riportato un esempio utilizzando le API client di Jersey. Nota come l'URL è lo stesso, solo il tipo di media richiesto è diverso.
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());
Per ulteriori informazioni
grazie, ma posso configurare il tipo di risposta unsing oggetto 'Response' quando ritorno dal metodo? – MyTitle
La risposta può specificare il tipo di contenuto: return Response.ok. (...) .type ("application/json"). build(); – mjn
Se sei schizzinoso su URL come I am ..., potresti usare un'estensione di file: '/ resources/todo.json' o'/resources/todo.xml' – Webnet