mit Restful JSON erzeugen

newbie999

Neues Mitglied
Hallo ich bin neu beim Erstellen von Software mit Java

Ich muss einen RestFulWebService erstellen, der mir eine csv Datei ausliest
und ein Json (key und value) zurückgibt.
Hier mein Code

Java:
@Path("/stadt")
public class Service {
	@GET
	@Path("{countrycode}")
	@Produces(MediaType.APPLICATION_JSON)
	public Object getId(@PathParam("countrycode") String countrycode)
			throws IOException {
		ArrayList<String> townValues = new ArrayList();
			
		CSVParser csvParser = new CSVParser(new FileInputStream("/home/Standorte.txt"));
		for (String t; (t = csvParser.nextValue()) != null;){
			String[][] values = csvParser.parse(t, '|');
			for (int i=0; i<values.length; i++){
				if(values[i][13].equals(countrycode)) {
					stadtValues.add(values[i][1]);
				}
			}
		}	
		StadtStandorte stadt = new StadtStandorte();
		stadt.setStadtStandorte(stadtValues);
		return stadt;
	}
}


Java:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class StadtStandorte {

	@XmlAttribute
	private ArrayList<String> stPlaces;


	public ArrayList<String> getStadtStandorte() {
		return stPlaces;
	}

	public void setStadtStandorte(ArrayList<String> StadtStandorte) {
		this.stPlaces = StadtStandorte;
	}
}


Ergebnis lautet wie folgt:

HTML:
{"@StadtStandorte":"BONN BERLIN MANNHEIM"}

Da ich eine JavascriptAnwendung habe, kann diese nix damit anfangen. Ich brauche
ein "richtiges" JSON

HTML:
{
"StadtStandorte": [
{ "site":"BONN" },
{ "site":"BERLIN" },
{ "site":"MANNHEIM" } ]
}

Kann mir jeman helfen so ein richtiges JSON mit key und value zu generieren und das mit Restful ??

Danke im voraus!!
 

schlingel

Gesperrter Benutzer
Sorry für die späte Antwort. Am Anfang dachte ich es geht um's Serialisieren, hab als erstes Mist geschrieben und dass dann ausgebessert. War schon klar, was du mit REST Service meinst :)

Zu deiner Frage. Das JSON wäre valide wenn es so zurück kommt:
Code:
"StadtStandorte" : ["BONN", "BERLIN", "HAMBURG"]

Warum das nicht so zurück kommt weiß ich nicht, wahrscheinlich hakt es wegen der ArrayList (Was es nicht sollte ...)

Du möchtest aber sowieso etwas anderes und eine Liste von Objekten zurück haben. { "site" : "wert" }

Dazu musst du dir dann einen eigenen MessageBodyWriter schreiben. Siehe auch hier.
 

DerFeivel

Bekanntes Mitglied
Wieso nen eigenen MessageBodyWriter?

Soweit ich mich richtig an meine REST-Projekte erinnere, könnte
er auch anstatt einer ArrayList von Strings eine Arraylist von
Standort-Objekten zurückgeben, welche wiederum ein Attribut site besitzen
(was anderes bedeutet das von ihm gewünschte JSON ja auch nicht:
Eine Liste von Standorten, deren Eigenschaft Site den Wert.... besitzen)
 

schlingel

Gesperrter Benutzer
Man kann jetzt darüber streiten was "sauberer" ist. Aber du hast recht, das ist auch eine mögliche Option die wahrscheinlich mit etwas weniger Code auskommt.
 

blondi

Mitglied
Hi
ich habe ein ähnliches Problem und die obenstehende Lösung bringt mich nicht weiter:

Mein RESTful Webserver sollte für meinen Client ein JSON liefern


Java:
@Path("/aktuell/")
public class AktuellSelect {

    @GET()
    @Produces("application/json")
   
    public String getAktuelles() throws Exception {
    String value = "{ 'email' :
['test1@yahoo.de','test2@yahoo.de','test3@yahoo.de']}";
        return value;
     
    }
}

Dieser Code funktioniert und liefert:

{ 'email' : ['test1@yahoo.de','test2@yahoo.de','test3@yahoo.de']}

d.h. key und dann value, value......

Ich habe aber folgende, kompiziertere JSON Struktur und weiss nicht wie ich diese erreichen in meinem REST erreichen kann?


HTML:
{"response": {
    "success": "true",
    "values": {
        "title": "Sample",
        "name": "main",
        "width": 500,
        "height": 500
    },
    "values": {
        "title": "Sample",
        "name": "main",
        "width": 500,
        "height": 500
    }
}}

Ich steh am Schlauch. Danke
 
Zuletzt bearbeitet:

Ähnliche Java Themen

Neue Themen


Oben