Wie Stelle ich ein Pojo mit der Jersey-Client, ohne Sie manuell konvertieren zu JSON?
Ich habe einen json-service die wie folgt aussieht:
@POST
@Path("/{id}/query")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(JSON)
public ListWrapper query(@Context SecurityContext sc, @PathParam("id") Integer projectId, Query searchQuery) {
...
return result
}
Dem query-Objekt sieht wie folgt aus und, wenn Ihr eine json-Darstellung der Query-Objekt, funktioniert es gut.
@XmlRootElement
public class Query {
Integer id;
String query;
... //Getters and Setters etc..
}
Will ich jetzt füllen, das Objekt von einem client, und verwenden Sie die Jersey-client-zu-post-Query-Objekt an den service und Holen Sie sich ein JSONObject als Ergebnis. Mein Verständnis ist, dass es getan werden könnte, ohne Umwandlung in ein json-Objekt zuerst, und dann gepostet als String.
Ich habe versucht, so etwas wie das, aber ich denke ich verpasse etwas.
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;
}
Bin ich mit Jersey 1.12.
Jede Hilfe oder Zeiger in die richtige Richtung wäre sehr geschätzt werden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Ihr web-service erzeugt eine JSON-Sie behandeln müssen, die in Ihren Kunden durch die Verwendung eines
accept()
Methode:Versuchen Sie dies und geben Ihre Ergebnisse.
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);
Nun habe ich ein JsonMappingException , aber ich denke, es ist ein Fehler in der json-Ergebnis.Den WebResource.Person (...) - Methode nicht verändert webResource Beispiel... es schafft und gibt ein generator-Objekt die änderung. Ihren Anruf .post ist in der Regel durchgeführt von einem Builder-Objekt, anstatt vom WebResource-Objekt. Dieser übergang wird leicht verdunkelt, wenn alle Anfragen sind miteinander verkettet.
Hier ist das gleiche Beispiel mit Verkettung. Es ist immer noch mit einem generator, aber weniger offensichtlich.
WebResource
Klasse. Bitte geben Sie den import-code!