JAX-RS: Comment puis-je retourner ma liste d'objets JSON?
J'ai regardé la documentation de Jackson, et il m'a laissé confus 🙁
Mon entité ressemble :
@Entity
@Table(name = "variable")
public class Variable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(unique = true, nullable = false)
private String name;
@Column
@Enumerated(EnumType.STRING)
private VariableType type;
@Column(nullable = false)
private String units;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "created_on", nullable = false)
private Date createdOn;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "retired_on", nullable = true)
private Date retiredOn;
@Column(nullable = false)
private boolean core;
}
et mon JAX-RS
service ressemble
@Path("/variable")
public class VariableResource {
@Inject private VariableManager variableManager;
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getVariables() {
return Response.ok(variableManager.getVariables()).build();
}
}
Quand je l'ai tester ce service à l'aide de curl http://localhost:8080/app/rest/variable
, je vois les suivants dans mes logs du serveur
[javax.ws.rs.core.Application]] (http--127.0.0.1-8080-6) Servlet.service() for servlet javax.ws.rs.core.Application threw exception: java.lang.NoSuchMethodError: org.codehaus.jackson.type.JavaType.<init>(Ljava/lang/Class;)V
Quels sont certains des moyens plus simples que je peux retourner à ma liste de variables comme JSON?
OriginalL'auteur daydreamer | 2013-01-14
Vous devez vous connecter pour publier un commentaire.
Normalement, c'est aussi simple que l'ajout de la
@XmlRootElement
sur votre Entité (je peux voir que vous êtes en utilisant JPA/Hibernate@Entity
/@Table
, mais il vous manque le@XmlRootElement
).Et c'est pour le service, à l'aide de la
Response
de JAX-RS, et également de retour directement un objet qui seront recueillis automatiquement par JAX-RS:Souvent, les gens serait de créer un DTO pour éviter d'exposer les valeurs internes de l'Entité de la base de données du monde réel, mais il n'est pas obligatoire, si c'est bien pour vous exposer l'ensemble de l'objet.
Si vous voulez JAX-RS à la sortie JSON à partir d'une entité, l'entité doit avoir la
@XmlRootElement
. Maintenant, si une méthode de votre service des ressources prend un élément de typeVariable
comme un paramètre post, JAX-RS permettra de créer l'objet pour vous et il sera possible de l'enregistrer via n'importe quelRepository
/EntityManager
(c'est juste un objet après tout, et il a@Entity
annotation).Une précision:
@XmlRootElement
n'est pas requis par JAX-RS, mais par JAXB, si elle est utilisée. Et pour JSON elle n'est pas souvent (il est utilisé pour une sortie XML par défaut). Ajoutant que ne fera pas de mal, bien sûr, et peut-être plus sûr pour assurer la sortie XML fonctionne. Mais je voulais juste te signaler un souci d'exhaustivité.OriginalL'auteur Alex