Jersey. Comment générer du json et xml de sortie en fonction de param url
Ici est un Jersey
service:
@GET
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public Response service(@QueryParam("format") String format) {
if (format.equals("json")) {...}
return response;
}
Je veux générer XML
ou JSON
réponse selon param url "format".
Mon réponse instance est mise en forme par jaxb2
Je sais que je peut obtenir xml
ou json
réponse si sur mon client Java /test fonctionnel en utilisant ce code:
String content = service.path("").queryParam("myparam", "myvalue").accept(MediaType.APPLICATION_XML).get(String.class);
ou
String content = service.path("").queryParam("myparam", "myvalue").accept(MediaType.APPLICATION_JSON).get(String.class);
Mais j'ai besoin de le faire en fonction de l'url param.
Si vous pouviez envoyer une
Est votre problème que vous ne savez pas comment définir le temps de réponse du type de contenu, ou...?
ContentType
paramètre, application/json
au lieu de json
, alors vous pouvez utiliser MediaType.valueOf(format)
pour obtenir le MediaType
instance et de l'utiliser avec l'accepter méthode.Est votre problème que vous ne savez pas comment définir le temps de réponse du type de contenu, ou...?
OriginalL'auteur ses | 2013-08-02
Vous devez vous connecter pour publier un commentaire.
Vous pouvez définir le type de support de l'entité de réponse directement via Réponse#ok (en supposant que vous voulez retourner
HTTP 200
statut) méthodeou en utilisant Réponse.ResponseBuilder#header méthode
OriginalL'auteur Michal Gajdos
Ce n'est pas la bonne façon de faire ce que vous voulez. Vous ne devriez pas être à l'aide d'un paramètre de requête pour déterminer le format de sortie. Vous avez déclaré que votre méthode produit à la fois de XML et JSON, conformes à la norme est de laisser le client d'envoyer un bon HTTP "Accept" en-tête qui indique quels types de médias, ils sont capables de consommer. Si l'on envoie dans "Accept: application/json", votre JAX-RS de mise en œuvre devraient choisir le format de votre méthode de réponse en JSON, si le client envoie "Accept: application/xml", il devrait automatiquement le format de votre réponse en XML. Si le client indique qu'ils peuvent accepter, votre JAX-RS de la mise en œuvre est libre de choisir et vous ne devriez pas de soins. Si le client indique qu'ils ne peuvent pas accepter, votre JAX-RS devrait renvoyer un HTTP appropriée code d'erreur indiquant qu'ils n'ont pas un moyen pour envoyer une réponse appropriée.
Je ne savais rien à propos OData jusqu'à ce que j'ai vu votre réponse, ne l'ai jamais utilisé. J'ai basé ma réponse sur ce que je savais au sujet RESTE principes à l'époque. Je vais prendre votre parole que OData ne ce mais ne semble pas encore droit de REPOS est censé être basé sur l'effet de levier HTTP normes, et de déterminer le format de sortie à partir d'un paramètre de requête n'est pas toute sorte de HTTP standard, que je sache.
Je suis d'accord dans la mesure du possible, le RESTE doit toujours respecter les normes. Il est intéressant de noter que tout service exigerait le type de données comme un paramètre de requête -- il semblerait les auteurs n'ont pas bien versé sur le REPOS, ou qu'il n'est pas du REPOS, le REPOS.
OriginalL'auteur user2456600
Ici l'exemple complet, la réponse ci-dessus est droite. J'ai également utiliser l'approche décrite ci-dessus, mais face à problème tout en travaillant avec la Liste. J'ai mis l'entité comme ceci:
Après que je suis confronté à cette exception:
Après la lecture de jersey document, j'ai trouvé la solution que nous avons besoin d'utiliser GenericEntity pour notre liste de cours. Ici l'exemple
OriginalL'auteur Anshu Kumar
Ok. Puisque nous parlons de choses à l'extérieur du modèle de me laisser tenter quelque chose:
Que diriez-vous d'utiliser un filtre (cherchez com.soleil.jersey.le spi.le conteneur.ResourceFilterFactory) sur votre service et de modifier (ou ajouter ou remplacer) les accepter en-tête basé sur votre requête param?
Pas l'approche la plus honnête, je l'avoue, mais je pense que vous devriez lui donner un essai
OriginalL'auteur Plínio Pantaleão