Parsen einer JSON-Antwort als ein Objekt
Guten Abend,
Ich bin ein Neuling in web-services-und ich will nur das schreiben einer einfachen client, wird einfach die Antworten von REST-Aufrufe.
Ich heruntergeladen und Hinzugefügt jersey-bundle-1.17.1.jar
zu meinem build path und fand ich ein funktionierendes Stück code, das macht einen REST Aufruf einer url und gibt eine Antwort zurück, als String
.
import javax.ws.rs.core.MediaType;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
public class TestJerseyClient {
public static void main(String[] args) {
try {
Client client = Client.create();
WebResource webResource = client
.resource("http://path/to/service");
ClientResponse response = webResource
.accept(MediaType.APPLICATION_JSON)
.get(ClientResponse.class);
if (response.getStatus() != 200)
throw new RuntimeException("Failed : HTTP error code : " + response.getStatus());
String output = response.getEntity(String.class);
System.out.println("Output from Server .... \n");
System.out.println(output);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Aber ich will nicht zu tun, string-Manipulationen, um die Teile der Antwort, das interessiert mich.
Ich würde es vorziehen, eine mehr strukturierte Herangehensweise, wie immer eine Object
anstatt ein string
(ein JSON
Objekt, ein Map<K,V>
Objekt, etc...)
VERSUCHEN Sie,#1 - Map<K V>
Sep 15, 2013 2:46:13 AM com.sun.jersey.api.client.ClientResponse getEntity
SEVERE: A message body reader for Java class java.util.Map, and Java type java.util.Map<java.lang.String, java.lang.Object>, and MIME media type application/json; charset=UTF-8 was not found
Sep 15, 2013 2:46:13 AM com.sun.jersey.api.client.ClientResponse getEntity
SEVERE: The registered message body readers compatible with the MIME media type are:
application/json; charset=UTF-8 ->
com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$App
com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$App
com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$App
*/* ->
com.sun.jersey.core.impl.provider.entity.FormProvider
com.sun.jersey.core.impl.provider.entity.StringProvider
com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
com.sun.jersey.core.impl.provider.entity.FileProvider
com.sun.jersey.core.impl.provider.entity.InputStreamProvider
com.sun.jersey.core.impl.provider.entity.DataSourceProvider
com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General
com.sun.jersey.core.impl.provider.entity.ReaderProvider
com.sun.jersey.core.impl.provider.entity.DocumentProvider
com.sun.jersey.core.impl.provider.entity.SourceProvider$StreamSourceReader
com.sun.jersey.core.impl.provider.entity.SourceProvider$SAXSourceReader
com.sun.jersey.core.impl.provider.entity.SourceProvider$DOMSourceReader
com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$General
com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General
com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General
com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$General
com.sun.jersey.core.impl.provider.entity.EntityHolderReader
com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$General
com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$General
com.sun.jersey.api.client.ClientHandlerException: A message body reader for Java class java.util.Map, and Java type java.util.Map<java.lang.String, java.lang.Object>, and MIME media type application/json; charset=UTF-8 was not found
at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:561)
at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:535)
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:696)
at com.sun.jersey.api.client.WebResource.access$300(WebResource.java:74)
at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:512)
at rest.TestJerseyClientAdvanced.main(TestJerseyClientAdvanced.java:36)
- Ich habe versucht, diese so weit (plaincode.blogspot.gr/2011/07/...), aber es gibt mir eine Fehlermeldung
- ^ Das Kommentar sollte ein edit werden auf die Frage.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich empfehle, verwenden Sie Jackson für die (un -) marshalling JSON Antworten. Diese kann getan werden, zwei Schritte, wie unten beschrieben.
Step1. erstellen Sie eine java bean mit dem Mitglied/Objekt-Namen, die mit der erwarteten Antwort. e.g, MyResponse.class
Step2. verwenden Sie die java-bean beim Lesen der Entität, von der client-Antwort.
com.sun.jersey/jersey-json
auf Ihrepom.xml
die KlasseJSONConfiguration
.response.readEntity(MyResponse.class)
zu werfen Sie Ihre AusgabeKönnen Sie Genson Bibliothek.
Wenn Sie brauchen, um nur einige Eigenschaften, die von großen JSON-Antwort, können Sie mit der Jersey-client-und JsonArray oder JsonObject Einheit.
Maven-Abhängigkeiten
Einfach :
diesem Beispiel sehen ...klicken Sie auf diese link für mehr info