Question

Je cherche un simples JSON (de) sérialiseur pour Java qui pourrait fonctionner avec GWT. J'ai googlé un peu et trouvé des solutions qui soit nécessitent annoter chaque membre ou définir des interfaces inutiles. Tout à fait un alésage. Pourquoi avons-nous pas quelque chose de vraiment simple comme

class MyBean {
    ...
}

new GoodSerializer().makeString(new MyBean());
new GoodSerializer().makeObject("{ ... }", MyBean.class)

Autres conseils

Une autre chose à essayer est le nouveau AutoBean cadre Introduit avec GWT 2.1.

Vous définissez les interfaces pour vos haricots et une usine qui les vends, et GWT génère mises en œuvre pour vous.

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

Le AutoBeanCodex peut être utilisé pour sérialisation à et de 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));

Ils travaillent sur le côté serveur trop - utiliser AutoBeanFactoryMagic.create(Beanery.class) au lieu de GWT.create(Beanery.class)

.

La façon la plus simple serait d'utiliser intégré l'API JSON de GWT. Voici la documentation . Et voici un grand tutoriel sur la façon de l'utiliser.

Il est aussi simple que cela:

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

L'API JsonValue est assez cool. Il vous permet de enchaînez que vous extrayez les validations des valeurs de l'objet JSON afin que les exceptions seront jetés si quelque chose de mal avec le format.

Il semble que j'ai trouvé la bonne réponse à ma question

Je me suis dit que le haricot à JSON et JSON à la conversion de haricots en GWT est pas une tâche triviale. bibliothèques connues ne travailleraient pas parce que GWT nécessiterait leur code source complet et ce code source doit utiliser uniquement des classes Java qui sont amoung par émulés GWT. En outre, vous ne pouvez pas utiliser la réflexion dans GWT. Des exigences très difficiles!

J'ai trouvé la seule solution existante nommée GWT-jsonizer . Il utilise un Générateur classe et nécessite une interface satellite pour chaque bean « jsonable ». Malheureusement, cela ne fonctionne pas sans patcher sur la dernière version de GWT et n'a pas été mis à jour depuis longtemps.

Alors, personnellement, je décide qu'il est moins cher et plus rapide de faire mes haricots Khow comment se convertir et de JSON. Comme ceci:

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 sont GWT classes intégrées qui offrent un soutien JSON bas niveau.

RestyGWT est une bibliothèque puissante pour l'encodage ou le décodage Java Object à JSON dans GWT:

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

Alors:

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

Il a également obtenu plusieurs API facile à utiliser pour la consommation des services RESTful Web.

Avoir un bon moment.

Vérifiez ceci:

GWT Professional JSON sérialiseur: http://code.google.com/p/gwtprojsonserializer/

Fonctionne avec GWT 2.0 +!

json.org/java semble être inclus avec GWT ces jours-ci:

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

Ou, ce projet semble être exhaustif: http://code.google.com/p/piriti/

Dans Google Applications Web Toolkit, pages 510-522, l'auteur, Ryan Dewsbury, montre comment utiliser la génération de code GWT pour faire sérialisation et de documents XML et JSON.

Vous pouvez télécharger le code ici ; vous voulez que le chapitre 10 faisceaux de code, et vous voulez regarder dans le répertoire src / com / gwtapps / package de sérialisation. Je ne vois pas une licence pour ce code, mais l'auteur ai envoyé pour voir ce qu'il dit. Je mettrai à jour ce s'il répond.

Problèmes liés à cette solution:

  • Vous devez ajouter une interface de marqueur sur tous vos objets que vous voulez sérialisé (il utilise java.io.Serializable mais j'imagine que vous pouvez utiliser d'autres - si vous utilisez pour votre mise en veille prolongée back-end, vos POJO peut-être déjà marqués comme ça).
  • Le code ne supporte que les propriétés de chaîne; il pourrait être étendu.
  • Le code est uniquement écrit pour 1.4 et 1.5.

Alors, ce n'est pas une sortie de la solution de la boîte, mais un excellent point de départ pour quelqu'un pour construire un sérialiseur JSON qui correspond à GWT. Combinez cela avec un sérialiseur JSON sur le côté serveur, comme JSON-lib et vous êtes bon pour aller.

J'ai aussi trouvé ce projet (encore une fois, une interface de marqueur est nécessaire).

Essayer cette sérialiseur de Google Code: http://code.google.com/p/ JSON-io /

Si vous avez besoin d'écrire ou de lire le format JSON en Java, c'est l'outil à utiliser. Pas besoin de créer des classes supplémentaires, etc. Convertir un graphique d'objets Java au format JSON en un seul appel. Faire le contraire - créer une chaîne JSON ou flux à des objets Java. Ceci est la bibliothèque la plus rapide que je l'ai encore vu le faire. Il est plus rapide que ObjectOutputStream et ObjectInputStream dans la plupart des cas, qui utilisent le format binaire.

Très pratique utilitaire.

Vous pouvez checkout ce projet https://gerrit.googlesource.com/gwtjsonrpc/

Il est une bibliothèque créée afin de soutenir un système d'examen de code pour Android, Gerrit, mais il est un module autonome destiné à être intégré dans un projet GWT, non seulement Gerrit.

Un tutoriel raisonnable est probablement le README au niveau supérieur de la annuaire. Il est tout à fait similaire à RPC GWT standard, mais il utilise le codage JSON. Il a également une protection intégrée XSRF.

Je semble répondre à cette question beaucoup ...

Il y a une page sur code.google.com intitulé En utilisant GWT pour JSON Mashups . Il est (malheureusement) chemin sur ma tête, comme je ne suis pas familier avec GWT, donc il ne peut pas être utile.

OK, j'ai supprimé ma réponse précédente, car il est avéré être exactement ce que vous ne vouliez pas.

Je ne sais pas comment il fonctionne avec GWT, mais nous utilisons le JSON-lib bibliothèque pour sérialiser des objets dans un projet Java normale où je travaille.

Il peut créer un JSONObject directement à partir d'un JavaBean, utilisez la résultant de la méthode toString () de JSONObject pour retourner la chaîne JSON réelle.

De même, il peut aussi se transformer JSON retour dans un JavaBean.

Je ne sais pas si Jackson fonctionne pour vous. Je ne sais pas s'il y a spécifiques à GWT que vous recherchez; sinon il devrait fonctionner.

Mais sa sérialisation / désérialisation fonctionne assez bien, comme:

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

Vous avez besoin d'accesseurs (getX() sérialiser, désérialiser setX(), peut annoter les méthodes avec d'autres noms), mais c'est tout

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top