Domanda

Sto cercando un semplice JSON (de) serializzatore per Java che potrebbe funzionare con GWT. Googled un po 'e trovato alcune soluzioni che richiedono sia annotare ogni membro o definire interfacce inutili. Piuttosto una noiosa. Perché non abbiamo qualcosa di veramente semplice come

class MyBean {
    ...
}

new GoodSerializer().makeString(new MyBean());
new GoodSerializer().makeObject("{ ... }", MyBean.class)
È stato utile?

Soluzione

Date un'occhiata a Tipi di sovrapposizione . Penso che questo è di gran lunga il modo più semplice per lavorare con JSON in GWT. Ecco un esempio di codice modificato dal articolo collegato:

public class Customer extends JavaScriptObject {
    public final native String getFirstName() /*-{ 
        return this.first_name;
    }-*/;
    public final native void setFirstName(String value) /*-{
        this.first_name = value;
    }-*/;
    public final native String getLastName() /*-{
        return this.last_name;
    }-*/;
    public final native void setLastName(String value) /*-{
        this.last_name = value;
    }-*/;
}

Una volta che hai il tipo di sovrapposizione definito, è facile creare un oggetto JavaScript da JSON e accedere alle sue proprietà in Java:

public static final native Customer buildCustomer(String json) /*-{
    return eval('(' + json + ')');
}-*/;

Se si vuole ancora una volta la rappresentazione JSON dell'oggetto, si può avvolgere il tipo di sovrapposizione in un JSONObject:

Customer customer = buildCustomer("{'Bart', 'Simpson'}");
customer.setFirstName("Lisa");
// Displays {"first_name":"Lisa","last_name":"Simpson"}
Window.alert(new JSONObject(customer).toString());

Altri suggerimenti

Un'altra cosa da provare è il nuovo AutoBean contesto introdotto con GWT 2.1.

È possibile definire le interfacce per i vostri fagioli e una fabbrica che li vends, e GWT genera implementazioni per voi.

interface MyBean {
  String getFoo();
  void setFoo(String foo);
}

interface MyBiggerBean {
  List<MyBean> getBeans();
  void setBeans(List<MyBean> beans>;
}

interface Beanery extends AutoBeanFactory{
  AutoBean<MyBean> makeBean();
  AutoBean<MyBiggerBean> makeBigBean();
}

Beanery beanFactory = GWT.create(Beanery.class);

void go() {
  MyBean bean = beanFactory.makeBean().as();
  bean.setFoo("Hello, beans");
}

Il AutoBeanCodex può essere utilizzato per serializzare loro da e per jSON.

AutoBean<MyBean> autoBean = AutoBeanUtils.getAutoBean(bean);
String asJson = AutoBeanCodex.encode(autoBean).getPayload();

AutoBean<MyBean> autoBeanCloneAB = 
  AutoBeanCodex.decode(beanFactory, MyBean.class, asJson );

MyBean autoBeanClone = autoBeanCloneAB.as(); 
assertTrue(AutoBeanUtils.deepEquals(autoBean, autoBeanClone));

Lavorano sul lato server troppo - utilizzare al posto di AutoBeanFactoryMagic.create(Beanery.class) GWT.create(Beanery.class)

.

Il modo più semplice sarebbe quella di utilizzare API JSON built-in di GWT. Ecco la documentazione . Ed ecco un grande tutorial su come usarlo.

E 'semplice come questo:

String json = //json string
JSONValue value = JSONParser.parse(json);

L'API JSONValue è piuttosto fresco. Esso consente di concatenano convalide come si estrae valori dalla oggetto JSON in modo che le eccezioni saranno gettati semmai di non va con il formato.

Sembra che ho trovato la risposta giusta alla mia domanda

Ho capito che fagiolo per JSON e JSON alla conversione fagiolo in GWT non è un compito banale. librerie noti non avrebbe funzionato perché GWT richiederebbe il loro codice sorgente completo e il codice sorgente deve utilizzare solo le classi Java che sono amoung emulato da GWT. Inoltre, non è possibile utilizzare riflessione in GWT. requisiti molto dura!

Ho trovato l'unica soluzione esistente denominato GWT-jsonizer . Esso utilizza un Generator classe e richiede un'interfaccia satellitare per ciascun bean "jsonable". Purtroppo, non funziona senza patch sulla più recente versione di GWT e non è stato aggiornato per un lungo periodo di tempo.

Quindi, io personalmente deciso che è più economico e più veloce per fare i miei fagioli Khow come se stessi convertire da e JSON. In questo modo:

public class SmartBean {
    private String name;

    public String getName() { return name; }
    public void setName(String value) { name = value;  }

    public JSONObject toJson() {
        JSONObject result = new JSONObject();
        result.put("name", new JSONString(this.name));
        return result;
    }
    public void fromJson(JSONObject value) {
        this.name = value.get("name").isString().stringValue();
    }

}

JSONxxxx sono GWT classi incorporate che forniscono il supporto JSON di basso livello.

RestyGWT è un potente libreria per codifica o decodifica Java Object per JSON in GWT:

import javax.ws.rs.POST;
...
public interface PizzaOrderCodec extends JsonEncoderDecoder<PizzaOrder> {
}

Quindi:

// GWT will implement the interface for you
PizzaOrderCodec codec = GWT.create(PizzaOrderCodec.class);

// Encoding an object to json
PizzaOrder order = ... 
JSONValue json = codec.encode(order);

// decoding an object to from json
PizzaOrder other = codec.decode(json);

Ha anche ottenuto diversi facile da usare API per consumo di servizi RESTful Web.

Avere un bel tempo.

Controlla questo:

GWT professionale JSON Serializer: http://code.google.com/p/gwtprojsonserializer/

! Funziona con GWT 2.0 +!

json.org/java sembra essere incluso con GWT in questi giorni:

GWT-servlet-deps.jar \ org \ json \

In alternativa, questo progetto sembra essere completo: http://code.google.com/p/piriti/

In Google Applicazioni Web Toolkit, pagine 510-522, l'autore, Ryan Dewsbury, mostra come utilizzare GWT generazione di codice per fare serializzazione da e per documenti XML e JSON.

È possibile scaricare il codice qui ; si desidera che i fasci di codice capitolo 10, e poi si vuole guardare in / com / gwtapps / pacchetto di serializzazione src. Non ho visto una licenza per questo codice, ma ho contattato l'autore per vedere quello che dice. Io aggiornare questo se risponde.

Problemi con questa soluzione:

  • È necessario aggiungere un'interfaccia marcatore su tutti i vostri oggetti che si desidera serializzato (lui usa java.io.Serializable ma immagino si potrebbe usare altri - se si utilizza il letargo per il back-end, i tuoi POJO potrebbero già essere taggati come questo).
  • Il codice supporta solo le proprietà di stringa; esso potrebbe essere esteso.
  • Il codice è scritto solo per 1.4 e 1.5.

Quindi, non si tratta di un out della soluzione di scatola, ma un ottimo punto di partenza per qualcuno per costruire un serializzatore JSON che si adatta con GWT. Che si combinano con un serializzatore JSON sul lato server, come JSON-lib e il gioco è fatto andare.

Ho trovato anche questo progetto (ancora una volta, un po 'interfaccia marcatore è richiesto).

Prova questo serializzatore da Google Code: http://code.google.com/p/ jSON-IO /

Se avete bisogno di scrivere o leggere il formato JSON in Java, questo è lo strumento da utilizzare. Non c'è bisogno di creare lezioni extra, ecc convertire un grafico oggetto Java in formato JSON in una sola chiamata. Fare il contrario - creare una stringa JSON o un flusso di oggetti Java. Questa è la libreria più veloce che ho visto ancora da fare questo. E 'più veloce di ObjectOutputStream e ObjectInputStream nella maggior parte dei casi, che utilizzano il formato binario.

Molto pratica utility.

Si consiglia di checkout questo progetto https://gerrit.googlesource.com/gwtjsonrpc/

Si tratta di una libreria creata al fine di sostenere un sistema di revisione del codice per Android, Gerrit, ma è un modulo autonomo pensato per essere integrato in qualsiasi progetto GWT, non solo Gerrit.

Un tutorial ragionevole è probabilmente il README nel livello superiore del directory. E 'molto simile a RPC standard di GWT, ma utilizza la codifica JSON. Essa ha anche built-in di protezione XSRF.

Mi sembra di rispondere a questa domanda un sacco ...

C'è una pagina su code.google.com intitolata Utilizzando GWT per JSON mashup . E '(purtroppo) così sopra la mia testa, come io non sono che la familiarità con GWT, quindi non può essere utile.

OK, ho cancellato la mia risposta precedente, perché si è rivelato essere esattamente quello che non volevi.

Non so come funziona con GWT, ma usiamo il JSON-lib libreria per serializzare gli oggetti in un normale progetto Java dove lavoro.

Può creare un JSONObject direttamente da un JavaBean , quindi utilizzare il risultante toString di JSONObject () metodo per ottenere la stringa effettiva JSON indietro.

Analogamente, esso può anche girare JSON indietro in un JavaBean .

Non sono sicuro se Jackson avrebbe funzionato per voi. Non so se c'è GWT-specifico che si sta cercando; se non dovrebbe funzionare.

Ma la sua serializzazione / deserializzazione funziona piuttosto bene, come:

// read json, create object
ObjectMapper mapper = new ObjectMapper();
MyBean bean = mapper.readValue(jsonAsString, MyBean.class);

// and write out
StringWriter sw = new StringWriter();
mapper.writeValue(sw, user);
String jsonOut = sw.toString();

Avete bisogno di accesso (getX() serializzare, deserializzare setX(); può annotare metodi con altri nomi), ma che su di esso

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