# api nutzen die json Objekte zurück gibt.



## Andre267 (20. September 2012)

Schönen guten Abend,

ich versuche gerade via Java auf eine Seite zu zugreifen, welche json Objekte zurück gibt.
Ich habe schon gegoogelt aber habe immer noch keine Ahnung wie ich auf die Seite zugreife mit java und die json objekte ind normale Objekte verarbeite bzw. wie ich damit arbeite.

Kann mir da jemand helfen?

Beispiel:
http://maxmusterman.de/api.php?user=max&passwort=Mustermann

```
{"uid":"31299"}
```

Vielen Dank schon mal an dieser Stelle. ^^


----------



## gorefest (21. September 2012)

Barenuckle : 

Du nimmst commons-httpclient und jackson. Mit commons-httpclient kannst Du bequem den Request zusammenbauen und das Ergebnis mit Jackson unmarshall'en

siehe hierzu http://wiki.fasterxml.com/JacksonInFiveMinutes


----------



## Andre267 (21. September 2012)

Danke, aber ich verstehe davon fast nix.
Ich möchte anmerken, dass ich ein blutiger Anfänger in Java bin.

Gibt es vielleicht eine Deutsche Methode mit sehr gutem Beispiel?


----------



## gorefest (21. September 2012)

Also, es gibt eine Library namens commons-httpclient

Die nutzt man so :


```
DefaultHttpClient client = new DefaultHttpClient();
		HttpGet get = new HttpGet(
				"http://localhost:8080/vehicledemo/rest/vendor/" + name);
		HttpResponse response = client.execute(get);

		if (response.getEntity() == null) {
			return null;
		}
		
// Möglichkeit 1 : mit JSON
                String json = response.getEntity().getContent(); // Hier würde JSON kommen

// Möglichkeit 2 : ohne JSON mit XML
		VendorDTO vendor = JAXB.unmarshal(response.getEntity().getContent(),
				VendorDTO.class); // Hier würde mann JAXB nutzen
		return vendor;
```

Damit kannst Du auf einfachem Wege zunächst mal das JSON herunterladen. Die Library gibt es unter apachi-commons oder mit folgenden Maven Koordinaten :


```
<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpclient</artifactId>
			<version>4.2-beta1</version>			
		</dependency>
```

Du kannst Das Jarfile auch über mvnrepository suchen und dann herunterladen und einbinden.

Danach solltest Du Dich mit JSON beschäftigen.


----------



## Andre267 (21. September 2012)

Wenn ich das so mache wie du sagst bekomme ich lauter Fehler! (siehe Anhang) 

PS: Ich verwende Java 7


----------



## gorefest (21. September 2012)

Yup,

da fehlt mindestens ein Import für die Response ;-) Wichtig ist auch die Version.

Und ein Tip zum Schluss zur Benamung : 

public class MeineKlasseHatCamelCase {

 MeineKlasseHatCamelCase meineKlasseHatCamelCase;

}

ist eine gängige Java-Konvention, d.h. mehr Entwickler verstehen Deinen Code,wenn Du Dich daran hälst und können Dir potentiell helfen.

Grüße
gore


----------



## Andre267 (21. September 2012)

Für die Response schlägt er mir keinen Import vor. :-(


----------



## RavenOnJ (22. September 2012)

es fehlt _'name'_ und HttpResponse findest du unter _org.apache.http.HttpResponse_. das gehört zu den core-Klassen, nicht zu client.

Gruß
Peter


----------



## Andre267 (23. September 2012)

Okay, und wie mache ich das ganze Thema so das ich die Get Anfragen verschicke?

Also eine Seite z.B.

Titel1 und Titel2 braucht und ich diese an meine Seite via Get an die Seite schicken möchte?


----------



## RavenOnJ (24. September 2012)

beispielsweise so könnte es gehen:


```
String getString(String titel1, String titel2){
    String host = "theHost";
    String path = "/path/to/resource";

    StringBuilder queryBuilder = new StringBuilder("Title1=");
    queryBuilder.append(titel1).append("&").append("Title2=").append(titel2);

    return sendRequest(host, path, queryBuilder.toString());
}

String sendRequest(String host, String path, String query){
    DefaultHttpClient client = new DefaultHttpClient();
    int port = 80; //vermutlich

    HttpGet get = new HttpGet(new URI("http", null, host, port, path, query, null) );

    HttpResponse response = client.execute(get);

    StatusLine statusLine = response.getStatusLine();

    if (statusLine.getStatusCode() >= 300) {
         throw new HttpResponseException(statusLine.getStatusCode(), statusLine.getReasonPhrase());
    }

    HttpEntity entity = response.getEntity();

    return entity == null ? null : EntityUtils.toString(entity);
}
```

Dies sollte den JSON-String von dem Server zurückgeben, den du dann bearbeiten kannst.

der Code muss noch durch exception-handling ergänzt werden, das hab ich mal weggelassen wegen der Übersichtlichkeit.

Gruß
Peter


----------



## Andre267 (11. Oktober 2012)

Andre267 hat gesagt.:


> Okay, und wie mache ich das ganze Thema so das ich die Get Anfragen verschicke?
> 
> Also eine Seite z.B.
> 
> Titel1 und Titel2 braucht und ich diese an meine Seite via Get an die Seite *schicken *möchte?



Ich will nur die Variablen an ein php script verschicken und möchte keine Antwort von der Seite auslesen oder so.


----------

