Wie aussetzen ich Daten in einem JSON-Format über einen Web Service mit Hilfe von Java?

StackOverflow https://stackoverflow.com/questions/57689

  •  09-06-2019
  •  | 
  •  

Frage

Gibt es eine einfache Möglichkeit, Daten auf dem Web-Service-Clients in JSON zurück java? Ich bin fein mit Servlets, Frühling, etc.

War es hilfreich?

Lösung

Für mich der beste Java <-> JSON-Parser ist XStream (ja, ich spreche wirklich über json, nicht über xml). XStream befaßt mich bereits mit zirkulären Abhängigkeiten und verfügt über eine einfache und leistungsfähige api, wo Sie Ihren Treiber schreiben könnten, Konverter und so weiter.

Mit freundlichen Grüßen

Andere Tipps

Es könnte sich lohnen, ein Blick in Jersey . Jersey macht es einfach geruhsame Webdiensten als XML und / oder JSON zu belichten.

Ein Beispiel ... mit einer einfachen Klasse starten

@XmlType(name = "", propOrder = { "id", "text" })
@XmlRootElement(name = "blah")
public class Blah implements Serializable {
    private Integer id;
    private String text;

    public Blah(Integer id, String text) {
        this.id = id;
        this.text = text;
    }    

    @XmlElement
    public Integer getId() { return id; }
    public void setId(Integer id) { this.id = id; }

    @XmlElement
    public String getText() { return text; }
    public void setText(String value) { this.text = value; }
}

Dann eine Ressource erstellen

@Path("/blah")
public class BlahResource {
    private Set<Blah> blahs = new HashSet<Blah>();

    @Context
    private UriInfo context;

    public BlahResource() {
        blahs.add(new Blah(1, "blah the first"));
        blahs.add(new Blah(2, "blah the second"));
    }

    @GET
    @Path("/{id}")
    @ProduceMime({"application/json", "application/xml"})
    public Blah getBlah(@PathParam("id") Integer id) {
        for (Blah blah : blahs) {
            if (blah.getId().equals(id)) {
                return blah;
            }
        }
        throw new NotFoundException("not found");
    }
}

und setzen Sie es. Es gibt viele Möglichkeiten, dies, wie durch die Verwendung Jersey ServletContainer zu tun. (Web.xml)

<servlet>
    <servlet-name>jersey</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>jersey</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

Das ist alles, was Sie tun müssen ... Pop öffnen Sie Ihren Browser und wechseln Sie zu http: // localhost / blah / 1 . Standardmäßig werden Sie XML-Ausgabe. Wenn Sie FireFox verwenden, installieren Sie TamperData und Ihre accept Header ändern, um application/json den JSON Ausgabe zu sehen.

Natürlich gibt es viel mehr zu bieten, aber Jersey macht all das Zeug ganz einfach.

Viel Glück!

Wir haben Flexjson wurden unter Verwendung von Java zur Umwandlung von Objekten in JSON und hat es sehr einfach zu bedienen gefunden. http://flexjson.sourceforge.net

Hier sind einige Beispiele:

public String searchCars() {
  List<Car> cars = carsService.getCars(manufacturerId);
  return new JSONSerializer().serialize(cars);
}

Es hat einige coolen Features wie deepSerialize die gesamte Grafik zu senden und es bricht nicht mit Bi-direktionalen Beziehungen.

new JSONSerializer().deepSerialize(user); 

Formatierungsdaten auf der Serverseite ist oft zu praktisch

new JSONSerializer().transform(
  new DateTransformer("dd/MM/yyyy"),"startDate","endDate"
).serialize(contract);

Yup! Schauen Sie sich Json-lib

Hier ist ein vereinfachte Code-Schnipsel aus meinem eigenen Code , die eine Reihe von meinen Domain-Objekten an:

private String getJsonDocumenent(Object myObj) (
    String result = "oops";
    try {
        JSONArray jsonArray = JSONArray.fromObject(myObj);

        result = jsonArray.toString(2);  //indent = 2

    } catch (net.sf.json.JSONException je) {

        throw je;
    }
    return result;
}

Ich habe Google-Gson zeugend gefunden. Er wandelt auf JSON und zurück. http://code.google.com/p/google-gson/ Es ist sehr flexibel und können Komplexitäten mit Objekten auf einfache Weise handhaben. Ich liebe seine Unterstützung für Generika.

/*
* we're looking for results in the form
* {"id":123,"name":thename},{"id":456,"name":theOtherName},...
*
* TypeToken is Gson--allows us to tell Gson the data we're dealing with
* for easier serialization.
*/
Type mapType = new TypeToken<List<Map<String, String>>>(){}.getType();

List<Map<String, String>> resultList = new LinkedList<Map<String, String>>();

for (Map.Entry<String, String> pair : sortedMap.entrySet()) {
    Map<String, String> idNameMap = new HashMap<String, String>();
    idNameMap.put("id", pair.getKey());
    idNameMap.put("name", pair.getValue());
    resultList.add(idNameMap);
}

return (new Gson()).toJson(resultList, mapType);

Für RESTful Web Services in Java, prüfen Sie auch die Restlet API , die eine sehr leistungsfähige und flexible bietet Abstraktion für REST Web Services (Server und Client in einem Behälter oder Standalone) und auch gut mit Frühlings- und JSON integriert.

Wie bereits erwähnt, Jersey (JAX-RS impl) ist der Rahmen zu verwenden; aber für grundlegenden Mapping von Java-Objekten zu / von JSON, Tutorial ist gut. Im Gegensatz zu vielen Alternativen, nicht verwendet es nicht seltsam, XML-Kompatibilität Konventionen, sondern liest und schreibt klare JSON, die direkt abbildet und von Objekten. Es hat auch keine Probleme mit null (es ist der Unterschied zwischen fehlendem Eintrag und einem mit null), leeren Listen oder Strings (beide unterscheiden sie von Nullen).

Jackson funktioniert gut mit Jersey als auch, entweder mit JAX-RS-Provider Glas oder auch manuell einfach. Ebenso ist es einfach leicht mit einfachen alten Servlets zu verwenden; nur Eingabe / Ausgabe-Stream erhalten, rufen ObjectMapper.readValue () und .writeValue (), und das ist es.

Ich war jaxws-json, für die Bereitstellung von JSON-Format Web-Services. Sie können das Projekt https://jax-ws-commons.dev.java. net / json / .

Es ist ein schönes Projekt, wenn Sie es nach oben zu bekommen, werden Sie herausfinden, wie reizend sie ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top