سؤال

أنا أبحث عن بسيط Json (de) serializer لـ Java الذي قد يعمل مع GWT.لقد بحثت في Google قليلاً ووجدت بعض الحلول التي تتطلب إما إضافة تعليقات توضيحية لكل عضو أو تحديد واجهات غير مجدية.مملة جدا.لماذا لا يكون لدينا شيء بسيط حقا مثل

class MyBean {
    ...
}

new GoodSerializer().makeString(new MyBean());
new GoodSerializer().makeObject("{ ... }", MyBean.class)
هل كانت مفيدة؟

المحلول

ونلقي نظرة على أنواع تراكب . وأعتقد أن هذا هو إلى حد بعيد أسهل طريقة للعمل مع 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;
    }-*/;
}

وبمجرد أن يكون لديك نوع تراكب تعريف، فإنه من السهل لخلق كائن جافا سكريبت من JSON ووصول خصائصه في جاوة:

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

نصائح أخرى

وشيء آخر هو محاولة الإطار AutoBean وعرض مع GWT 2.1.

ويمكنك تحديد واجهات للحبوب ومصنع لvends لهم، و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 يمكن استخدامها لتسلسل لهم من وسلمان.

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)

.

وأبسط طريقة سيكون لاستخدام المدمج في JSON API GWT ل. وهنا href="http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/json/client/" وثائق . وهنا هو عظيم تعليمي على كيفية استخدامها.

وانها بسيطة مثل هذا:

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

ووAPI JSONValue هو بارد جدا. فإنه يتيح لك سلسلة لإثبات وكما كنت استخراج القيم من كائن JSON بحيث سيتم طرح الاستثناءات إذا كان أي شيء على ما يرام مع الشكل.

ويبدو أن وجدت الجواب الصحيح لسؤالي

وأنا أحسب أن الفول لسلمان وسلمان لتحويل الفول في GWT ليس بالأمر الهين. أن المكتبات المعروفة لا تعمل بسبب GWT سيتطلب كامل شفرة المصدر، وهذا الكود يجب أن يستخدم فقط فئات Java التي amoung تحاكيه GWT. أيضا، لا يمكنك استخدام التفكير في GWT. متطلبات صعبة للغاية!

ولقد وجدت الحل الوحيد القائم اسمه GWT-jsonizer . ويستخدم مولد الطبقة وتتطلب واجهة الأقمار الصناعية لكل الفول "jsonable". لسوء الحظ، فإنه لا يعمل دون الترقيع على أحدث نسخة من GWT ولم يتم تحديثها منذ فترة طويلة.

وهكذا، وأنا شخصيا قررت أنه أرخص وأسرع لجعل بلدي الفاصوليا khow كيفية تحويل أنفسهم من وسلمان. مثل هذا:

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 مضمنة تقديم الدعم سلمان على مستوى منخفض.

RestyGWT هي مكتبة قوية لتشفير أو فك كائن جافا ل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 للدول المستهلكة خدمات الويب مريحة.

هل لديك وقت لطيف.

والتحقق من ذلك:

وGWT المهنية JSON مسلسل: http://code.google.com/p/gwtprojsonserializer/

و! يعمل مع GWT 2.0 +!

وjson.org/java يبدو أن يتم تضمينها مع GWT في هذه الأيام:

وGWT-بريمج-deps.jar \ غزاله \ سلمان \

وأو يبدو هذا المشروع أن يكون شاملا: http://code.google.com/p/piriti/

في تطبيقات Google Web Toolkit، الصفحات من 510 إلى 522، يوضح المؤلف Ryan Dewsbury كيفية استخدام إنشاء كود GWT لإجراء التسلسل من وإلى مستندات XML وJSON.

أنت تستطيع قم بتنزيل الكود هنا;تريد حزم أكواد الفصل 10، ثم تريد البحث في حزمة src/com/gwtapps/serialization.لم أر ترخيصًا لهذا الرمز، ولكن قمت بإرسال بريد إلكتروني إلى المؤلف لمعرفة ما يقوله.سأقوم بتحديث هذا إذا أجاب.

مشاكل مع هذا الحل:

  • يجب عليك إضافة واجهة علامة على جميع الكائنات التي تريد إجراء تسلسل لها (يستخدم java.io.Serializable ولكني أتخيل أنه يمكنك استخدام الآخرين - إذا كنت تستخدم السبات للواجهة الخلفية الخاصة بك، فقد يتم وضع علامة على pojos الخاص بك بالفعل مثل هذا) .
  • يدعم الكود خصائص السلسلة فقط؛يمكن تمديده.
  • الكود مكتوب فقط لـ 1.4 و 1.5.

لذلك، هذا ليس حلاً خارج الصندوق، ولكنه نقطة انطلاق رائعة لشخص ما لإنشاء مُسلسل JSON يتناسب مع GWT.قم بدمج ذلك مع مُسلسل JSON على جانب الخادم، مثل json-lib وأنت على ما يرام.

لقد وجدت أيضا هذا المشروع (مرة أخرى، مطلوب بعض واجهة العلامة).

وحاول هذا مسلسل من مدونة جوجل: http://code.google.com/p/ سلمان-IO /

إذا كنت بحاجة لكتابة أو قراءة تنسيق JSON في جاوة، وهذا هو أداة للاستخدام. لا حاجة لإنشاء فصول إضافية، الخ تحويل كائن الرسم البياني جافا إلى تنسيق JSON في مكالمة واحدة. تفعل العكس - إنشاء سلسلة JSON أو تيار إلى كائنات جافا. وهذا هو أسرع مكتبة لقد رأيت حتى الآن للقيام بذلك. وهو أسرع من ObjectOutputStream وObjectInputStream في معظم الحالات، والتي تستخدم تنسيق ثنائي.

ومفيد فائدة جدا.

وقد ترغب في الخروج هذا المشروع https://gerrit.googlesource.com/gwtjsonrpc/

وانها مكتبة أنشئت من أجل دعم نظام مراجعة التعليمات البرمجية لالروبوت، جيريت، إلا أنها وحدة قائمة بذاتها من المفترض أن تكون جزءا لا يتجزأ في أي مشروع GWT، وليس فقط جيريت.

وهناك أمثلة توضيحية معقول هو على الارجح README في المستوى الأعلى من الدليل. انها مماثلة تماما لمعيار RPC GWT ولكنه يستخدم الترميز JSON. كما أن لديها المدمج في حماية XSRF.

يبدو أنني أجيب على هذا السؤال كثيراً..

هناك صفحة على code.google.com بعنوان استخدام GWT لـ JSON Mashups.إنه (للأسف) فوق رأسي، لأنني لست على دراية بـ GWT، لذلك قد لا يكون مفيدًا.

وOK، I حذف جوابي السابقة، لأنها تحولت إلى أن تكون بالضبط ما كنت لا تريد.

وأنا لا أعرف كيف أنها تعمل بشكل جيد مع GWT، ولكن نحن نستخدم سلمان-ليب مكتبة لتسلسل الكائنات في مشروع Java العادي الذي أعمل فيه.

إنشاء JSONObject مباشرة من المشترك JavaBean على ، ثم استخدم مما أدى toString JSONObject ل() طريقة للحصول على سلسلة JSON الفعلية الظهر.

وبالمثل، فإنه يمكن أيضا تشغيل JSON العودة الى التخطيط الاستراتيجي المشترك JavaBean على .

وإذا لم تكن متأكدا جاكسون سيعمل لك. أنا لا أعرف إذا كان هناك 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() إلغاء تسلسل، ويمكن تعليم طرق مع أسماء أخرى)، ولكن ذلك حول هذا الموضوع

.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top