Comment puis-je POSTER un Pojo avec Jersey Client sans convertir manuellement en JSON?
J'ai un travail json service qui ressemble à ceci:
@POST
@Path("/{id}/query")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(JSON)
public ListWrapper query(@Context SecurityContext sc, @PathParam("id") Integer projectId, Query searchQuery) {
...
return result
}
L'objet de requête ressemble à ceci et lors de la publication d'une représentation json de l'objet de Requête, il travaille sur nice.
@XmlRootElement
public class Query {
Integer id;
String query;
... //Getters and Setters etc..
}
Maintenant je veux remplir cet objet à partir d'un client et de l'utilisation Jersey client de post que l'objet de Requête pour le service et obtenir un JSONObject. Ma compréhension est que cela pourrait se faire sans le convertir en un objet json en premier et ensuite affichés sous forme de Chaîne.
J'ai essayé quelque chose comme ça, mais je pense que j'ai raté quelque chose.
public static JSONObject query(Query searchQuery){
String url = baseUrl + "project/"+searchQuery.getProjectId() +"/query";
WebResource webResource = client.resource(url);
webResource.entity(searchQuery, MediaType.APPLICATION_JSON_TYPE);
JSONObject response = webResource.post(JSONObject.class);
return response;
}
Je suis en utilisant Jersey 1.12.
Toute aide ou un pointeur dans la bonne direction serait très apprécié.
OriginalL'auteur Perty | 2012-04-26
Vous devez vous connecter pour publier un commentaire.
Si votre web-service produit un JSON vous devez gérer qui de votre client à l'aide d'un
accept()
méthode:Essayer cela et donner vos résultats.
WebResource webResource = client.resource(url); ClientResponse response = webResource.type(MediaType.APPLICATION_JSON_TYPE).accept(MediaType.APPLICATION_JSON).post(ClientResponse.class, searchQuery); ListWrapper listWrapper = response.getEntity(ListWrapper.class);
Maintenant j'ai une JsonMappingException , mais je pense que c'est une erreur dans le résultat json.Désolé mon balisage :-/
OriginalL'auteur Alex Stybaev
La WebResource.entité(...) la méthode ne modifie pas votre webResource exemple... il crée et retourne un objet Générateur qui détient le changement. Votre appel .post est généralement effectué par un Constructeur de l'objet plutôt que de le WebResource objet. La transition est facilement évacuées lorsque toutes les demandes sont enchaînés.
Voici le même exemple en utilisant le chaînage. C'est encore à l'aide d'un Générateur, mais de moins en moins bien évidemment.
Je ne peux pas trouver
WebResource
classe. Merci de donner le code d'importation!Si vous êtes en utilisant le 1.x branche (OP version 1.12), vous pouvez trouver plus de détails sur WebResource ici: jersey.java.net/nonav/apidocs/1.9/jersey/com/sun/jersey/api/...
OriginalL'auteur phatfingers