уроки - spring mvc json




Json<-> Сериализация Java, которая работает с GWT (9)

json.org/java, кажется, входит в GWT в эти дни:

GWT-сервлет-deps.jar \ орг \ JSON \

Или этот проект представляется исчерпывающим: http://code.google.com/p/piriti/

Я ищу простой Json (de) сериализатор для Java, который может работать с GWT. Я немного искал Google и нашел некоторые решения, которые либо требуют аннотировать каждого участника, либо определять бесполезные интерфейсы. Довольно скучно. Почему бы нам не сделать что-то очень простое, как

class MyBean {
    ...
}

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

В приложениях Google Web Toolkit, с 510 по 522, автор, Райан Дьюсбери, показывает, как использовать генерацию кода GWT для сериализации в документы XML и JSON и из них.

Вы можете скачать код здесь ; вам нужны комплекты кода главы 10, а затем вы хотите посмотреть в пакете src / com / gwtapps / serialization. Я не видел лицензии на этот код, но отправил его по электронной почте, чтобы узнать, что он говорит. Я обновлю это, если он ответит.

Проблемы с этим решением:

  • Вам нужно добавить интерфейс маркера на все ваши объекты, которые вы хотите сериализовать (он использует java.io.Serializable, но я полагаю, вы могли бы использовать другие - если вы используете спящий режим для вашего бэкэнд, ваши pojos могут уже быть помечены как это) ,
  • Код поддерживает только свойства строки; он может быть расширен.
  • Код написан только для 1.4 и 1.5.

Таким образом, это не решение из коробки, но отличная отправная точка для компилятора JSON, который подходит для GWT. Объедините это с JSON-сериализатором на стороне сервера, например json-lib и вам хорошо идти.

Я также нашел этот проект (опять-таки, требуется какой-то интерфейс маркера).


Вы можете проверить этот проект https://gerrit.googlesource.com/gwtjsonrpc/

Это библиотека, созданная для поддержки системы проверки кода для Android, Gerrit, но это автономный модуль, предназначенный для встраивания в любой проект GWT, а не только с Gerrit.

Разумное руководство - это, вероятно, README на верхнем уровне каталога. Он очень похож на стандартный GWT RPC, но использует JSON-кодирование. Он также имеет встроенную защиту XSRF.


Еще одна вещь, которую нужно попробовать - это новая AutoBean представленная с GWT 2.1.

Вы определяете интерфейсы для своих компонентов и фабрику, которая их расшифровывает, а GWT генерирует для вас реализации.

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

AutoBeanCodex может использоваться для сериализации их в и из 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));

Они также работают на стороне сервера - используйте AutoBeanFactoryMagic.create(Beanery.class) вместо GWT.create(Beanery.class) .


Кажется, я очень много отвечаю на этот вопрос ...

На странице code.google.com есть страница « Использование GWT для Mashups JSON» . Это (к сожалению) на моей голове, так как я не знаком с GWT, так что это может быть не полезно.


Не уверен, что Jackson будет работать на вас. Я не знаю, есть ли GWT-специфический, который вы ищете; если нет, то это должно сработать.

Но его сериализация / десериализация работает достаточно хорошо, как:

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

Вам нужны аксессоры ( getX() для сериализации, setX() для десериализации, могут аннотировать методы с другими именами), но это все.



Самый простой способ - использовать встроенный JSON API GWT. Вот google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/… . И вот отличный учебник о том, как его использовать.

Это так просто:

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

API JSONValue довольно крут. Он позволяет вам проверять цепочку при извлечении значений из объекта JSON, чтобы исключение было выбрано, если что-то не соответствует формату.


RestyGWT - мощная библиотека для кодирования или декодирования Java Object для JSON в GWT:

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

Затем:

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

Он также имеет несколько простых в использовании API для использования Restful web-сервисов.

Приятного времени.





javabeans