Pregunta

Estoy buscando un simple Json (de)serializador para Java que podría trabajar con GWT.He buscado en google un poco y encontré algunas soluciones que necesitan anotar cada miembro o definir inútil interfaces.Bastante aburrido.¿Por qué no hemos de algo muy simple como

class MyBean {
    ...
}

new GoodSerializer().makeString(new MyBean());
new GoodSerializer().makeObject("{ ... }", MyBean.class)
¿Fue útil?

Solución

Tome un vistazo a Tipos de superposición . Creo que esto es, con mucho, la forma más fácil de trabajar con JSON en GWT. Aquí está un ejemplo de código modificado del artículo enlazado:

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 vez que tenga el tipo de superposición definida, es fácil crear un objeto JavaScript de JSON y acceder a sus propiedades en Java:

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

Si desea que la representación JSON del objeto nuevo, se puede envolver el tipo de superposición en un JSONObject:

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

Otros consejos

Otra cosa a intentar es el nuevo marco AutoBean introdujo con GWT 2.1.

Se definen las interfaces para sus frijoles y una fábrica que les vends y GWT genera implementaciones para usted.

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

El AutoBeanCodex se puede utilizar para serializarlos hacia y desde 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));

Trabajan en el lado del servidor también - AutoBeanFactoryMagic.create(Beanery.class) utilizar en lugar de GWT.create(Beanery.class)

.

La forma más sencilla sería utilizar la API JSON incorporado en GWT. Aquí está la documentación . Y aquí es un gran tutorial sobre cómo usarlo.

Es tan simple como esto:

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

La API JsonValue está muy bien. Se le permite encadenar validaciones como extraer valores del objeto JSON manera que las excepciones serán lanzados si de algo mal con el formato.

Parece que he encontrado una respuesta a mi pregunta

Me di cuenta de que haba a json y json para frijol de conversión en GWT no es una tarea trivial.Conoce las bibliotecas no iba a funcionar porque GWT requeriría su código fuente completo y este código fuente debe utilizar sólo las clases de Java que están entre emulado por GWT.También, usted puede utilizar la reflexión en GWT.Muy exigentes requisitos!

He encontrado la única solución existente denominado gwt-jsonizer.Se utiliza personalizado Generador de clase y requiere una interfaz de satélite para cada uno de los "jsonable" bean.Por desgracia, no funciona sin parchear la versión más reciente de GWT y no ha sido actualizado por un largo tiempo.

Así que, yo personalmente decidido que es más barato y más rápido para hacer mis frijoles khow cómo convertir sí mismos y de json.Como este:

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 son GWT integrado en las clases que proporcionan la baja en el nivel de soporte json.

RestyGWT es una biblioteca de gran alcance para la codificación o decodificación Java de objetos para JSON en GWT:

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

A continuación:

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

También ha conseguido varios fácil de usar API para consumir servicios web RESTful.

Tenga un buen tiempo.

Comprobar lo siguiente:

GWT JSON Profesional Serializador: http://code.google.com/p/gwtprojsonserializer/

Funciona con GWT 2.0 +!

json.org/java parece estar incluido con GWT estos días:

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

O, este proyecto parece ser integral: http://code.google.com/p/piriti/

En las aplicaciones de Google Web Toolkit, páginas 510 a 522, el autor, Ryan Dewsbury, muestra cómo utilizar la generación de código GWT hacer serialización ay de documentos XML y JSON.

Puede descargar el código aquí ; desea que los paquetes capítulo 10 del código, y luego que desea buscar en el paquete src / com / gwtapps / serialización. No vi una licencia para el código, pero he enviado por correo electrónico el autor para ver lo que dice. Voy a actualizar este caso, responde.

Los problemas con esta solución:

  • Hay que añadir una interfaz de marcador en todos sus objetos que desea serializado (que utiliza java.io.Serializable pero me imagino que podría utilizar otros - si está utilizando hibernación para su back-end, sus POJOs pueden estar ya etiquetados como este).
  • El código sólo es compatible con las propiedades de cadena; podría ampliarse.
  • El código sólo es escrito para 1,4 y 1,5.

Por lo tanto, esto no es un fuera de la solución de caja, pero un gran punto de partida para alguien para construir un serializador JSON que encaja con GWT. Combine eso con un serializador JSON en el lado del servidor, como JSON y ya está bueno para ir.

También encontré este proyecto (de nuevo, alguna de las interfaces marcador se requiere).

Probar serializador de Google Code: http://code.google.com/p/ JSON-io /

Si tiene que escribir o leer el formato JSON en Java, esta es la herramienta a utilizar. No es necesario crear clases adicionales, etc Convertir un gráfico de objetos Java a formato JSON en una llamada. Hacer lo contrario - crear una cadena JSON o una corriente de objetos Java. Esta es la biblioteca más rápido que he visto hasta ahora para hacer esto. Es más rápido que ObjectOutputStream y ObjectInputStream en la mayoría de los casos, que utilizan el formato binario.

utilidad muy práctica.

Es posible que desee a la caja de este proyecto https://gerrit.googlesource.com/gwtjsonrpc/

Es una biblioteca creada con el fin de apoyar un sistema de revisión de código para Android, Gerrit, pero es un módulo independiente destinado a ser incorporado en cualquier proyecto GWT, no sólo Gerrit.

Un tutorial razonable es probablemente el README en el nivel superior de la directorio. Es bastante similar a RPC GWT estándar pero utiliza JSON codificación. También se ha incorporado en la protección XSRF.

Me parece estar respondiendo a esta pregunta mucho ...

Hay una página en code.google.com titulado El uso de GWT para JSON Mashups . Es la forma (por desgracia) por encima de mi cabeza, ya que no estoy tan familiarizado con GWT, por lo que puede no ser útil.

OK, he borrado mi respuesta anterior, ya que resultó ser exactamente lo que usted no quería.

No sé qué tan bien funciona con GWT, pero usamos el JSON biblioteca para serializar objetos en un proyecto Java normal, en la que trabajo.

Puede crear un JSONObject directamente de un JavaBean , a continuación, utilizar el dando como resultado el método toString de JSONObject () para obtener la cadena real JSON.

Del mismo modo, también puede girar JSON de nuevo en un JavaBean .

No estoy seguro si Jackson iba a funcionar para usted. No sé si hay GWT-específica que busca; si no que debería funcionar.

Sin embargo, su serialización / deserialización funciona bastante bien, como:

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

Usted necesita descriptores de acceso (getX() para serializar, deserializar setX(); puede anotar métodos con otros nombres), pero eso es todo

.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top