Domanda

C'è un modo semplice per restituire i dati ai client del servizio web in JSON utilizzando java?Io sto bene con servlet, spring, ecc.

È stato utile?

Soluzione

Per me, il miglior Java <-> JSON parser è XStream (sì, sto parlando di json, non su xml).XStream già si occupa di dipendenze circolari e ha un semplice e potente api in cui è possibile scrivere il vostro driver, convertitori e così via.

Cordiali Saluti

Altri suggerimenti

Potrebbe essere la pena di guardare in Jersey.Jersey rende facile esporre restful web services xml e/o JSON.

Un esempio...iniziare con una semplice classe

@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; }
}

Quindi creare una Risorsa

@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");
    }
}

e lo espongono.Ci sono molti modi per fare questo, ad esempio utilizzando Jersey ServletContainer.(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>

È tutto quello che dovete fare...pop aprire il tuo browser e selezionare http://localhost/blah/1.Per impostazione predefinita, verrà visualizzato l'output XML.Se si utilizza FireFox, installare TamperData e cambiare il tuo accept intestazione application/json per vedere l'output JSON.

Ovviamente c'è molto di più ad esso, ma Jersey fa tutta quella roba abbastanza facile.

Buona fortuna!

Abbiamo utilizzato Flexjson per la conversione di oggetti Java a JSON e l'ho trovato molto facile da usare.http://flexjson.sourceforge.net

Ecco alcuni esempi:

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

Ha alcune funzioni interessanti come deepSerialize per inviare l'intero grafico e non rompere con bi-direzionale relazioni.

new JSONSerializer().deepSerialize(user); 

Formattazione di date sul lato server è spesso troppo a portata di mano

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

http://www.json.org/java/index.html è ciò di cui avete bisogno.

Yup!Check out json-lib

Qui è un semplificato snippet di codice dal mio codice che invia una serie di miei oggetti del dominio:

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;
}

Ho trovato google-ediletto convincente.Converte a JSON e indietro. http://code.google.com/p/google-gson/ E ' molto flessibile e in grado di gestire la complessità con gli oggetti in maniera semplice.Mi piace il suo supporto per i generici.

/*
* 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);

For RESTful web services in Java, anche controllare il Restlet API che fornisce un potente e flessibile di astrazione per il RESTO i servizi web (server e client, in un contenitore o standalone), e, inoltre, si integra bene con la Primavera e JSON.

Come già accennato, Jersey (JAX-RS impl) è il quadro utilizzare;ma di base per la mappatura di oggetti Java da/JSON, Tutorial è un bene.A differenza di molte alternative, non fa uso di strano XML-compatibilità, le convenzioni, ma legge e scrive pulito JSON che direttamente mappe e oggetti.Esso inoltre non ha problemi con null (non c'è differenza tra valore mancante e uno che ha null), Elenchi vuoti o Stringhe (entrambi sono distinti da null).

Jackson funziona bene con la Maglia, utilizzando JAX-RS fornitore di vaso, o anche solo manualmente.Allo stesso modo è banalmente facile da usare con semplici servlets;basta avere input/output stream, chiamata ObjectMapper.readValue() e .writeValue(), e che su di esso.

Sono stato con esempio jaxws-json, per la fornitura di formato JSON servizi web.è possibile controllare il progetto https://jax-ws-commons.dev.java.net/json/.

e ' un bel progetto, una volta che si ottiene, potrai scoprire come affascinante è.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top