Json <-> сериализация Java, которая работает с [закрытым] GWT

Поскольку у вас нет данных в таблице директора, вы не можете выполнить запись в таблицу фильмов (из-за ссылки на внешний ключ), поэтому сначала введите некоторые данные в таблицу директора, затем введите данные в таблицу фильмов

[112 ] Подробнее см. По этой ссылке Оператор INSERT конфликтует с ограничением FOREIGN KEY - SQL Server

59
задан amartynov 25 March 2009 в 19:40
поделиться

8 ответов

Посмотрите на типы наложения GWT . Я думаю, что это самый простой способ работы с JSON в GWT. Вот пример измененного кода из связанной статьи:

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

После того, как вы определили тип наложения, можно легко создать объект JavaScript из JSON и получить доступ к его свойствам в Java:

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

Если вы хотите снова получить представление объекта в формате JSON , Вы можете обернуть тип наложения в JSONObject:

Customer customer = buildCustomer("{'Bart', 'Simpson'}");
customer.setFirstName("Lisa");
// Displays {"first_name":"Lisa","last_name":"Simpson"}
Window.alert(new JSONObject(customer).toString());
55
ответ дан Chris Kentfield 24 November 2019 в 18:14
поделиться

Не уверенный, если 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() десериализовывать; может аннотировать методы другими именами), но это об этом.

-1
ответ дан Michael Mrozek 24 November 2019 в 18:14
поделиться

Хорошо, я удалил свой предыдущий ответ, потому что это оказалось точно, что Вы не хотели.

Я не знаю, как хорошо это работает с GWT, но мы пользуемся библиотекой json-lib для сериализации объектов в нормальном проекте Java, где я работаю.

Это может создать JSONObject непосредственно из JavaBean, затем использовать toString получающегося JSONOBJECT () метод для возвращения фактической строки JSON.

Аналогично, это может также возвратить JSON в JavaBean.

-1
ответ дан Powerlord 24 November 2019 в 18:14
поделиться

Кажется, что я нашел правильный ответ на свой вопрос

Я выяснил, что боб к json и json к бобовому преобразованию в GWT не является тривиальной задачей. Известные библиотеки не работали бы, потому что GWT потребует их полного исходного кода, и этот исходный код должен использовать только классы Java, которые являются среди эмулированного GWT. Кроме того, Вы не можете использовать отражение в GWT. Очень жесткие требования!

Я нашел единственное существующее решение названным gwt-jsonizer. Это использует пользовательский класс Генератора и требует интерфейса подстанции для каждого "jsonable" боба. К сожалению, это не работает, не исправляя над последней версией GWT и не обновлялось в течение долгого времени.

Так, я лично решил, что это более дешево и быстрее для создания моих бобов khow, как преобразовать себя в и от json. Как это:

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 встроенные классы GWT, которые обеспечивают низкий уровень json поддержка.

11
ответ дан amartynov 24 November 2019 в 18:14
поделиться

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

Существует страница на code.google.com, названном Используя GWT для Мэшапов JSON. Это - (к сожалению), путь по моей голове, поскольку я не настолько знаком с GWT, таким образом, это не может быть полезно.

0
ответ дан James Moore 24 November 2019 в 18:14
поделиться

В приложениях 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 , и все готово.

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

2
ответ дан 24 November 2019 в 18:14
поделиться

Проверьте это:

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

! Работает с GWT 2.0+!

5
ответ дан 24 November 2019 в 18:14
поделиться

Самый простой способ - использовать встроенный в GWT JSON API. Вот документация . А вот отличный учебник о том, как его использовать.

Это очень просто:

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

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

12
ответ дан 24 November 2019 в 18:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: