日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

敏捷中gwt含义_在GWT中序列化/反序列化Json

發(fā)布時(shí)間:2023/12/3 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 敏捷中gwt含义_在GWT中序列化/反序列化Json 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

敏捷中g(shù)wt含義

JSON和GWT

最近, GWT用戶(hù)小組中進(jìn)行了有趣的討論 ,涉及在客戶(hù)端對(duì)JSON進(jìn)行序列化/反序列化的最佳實(shí)踐。 這篇文章旨在突出其重點(diǎn)。 到目前為止,在GWT中有三種將對(duì)象轉(zhuǎn)換為JSON并從客戶(hù)端轉(zhuǎn)換回JSON的方法:

gwt-jackson框架:

gwt-jackson包裝了著名的杰克遜圖書(shū)館的某些功能。 它允許使用稱(chēng)為ObjectMapper的接口轉(zhuǎn)換對(duì)象。 使用gwt-jackson的優(yōu)點(diǎn)在于,它可以序列化諸如Collections和Maps之類(lèi)的復(fù)雜對(duì)象。 它還允許使用@JsonProperty和@JsonCreator之類(lèi)的注釋進(jìn)行花式轉(zhuǎn)換。 gwt-jackson的唯一遺憾是它使用了Generators ,在GWT 3.0版中將棄用該工具。 還值得注意的是RestyGWT使用了gwt-jackson,這是從客戶(hù)端發(fā)出HTTP請(qǐng)求的替代方法之一。

可以在Github頁(yè)面上找到示例: https : //github.com/nmorel/gwt-jackson/tree/master/examples

使用JavaScriptObject:

這是傳統(tǒng)方法之一。 JavaScriptObject利用JSNI創(chuàng)建一個(gè)普通的JS對(duì)象。 它可以擴(kuò)展并具有cast()方法,該方法允許將對(duì)象“安全”投射到其子類(lèi)型。 可以使用JsonUtils.stringify()方法將JavaScriptObject轉(zhuǎn)換為JSON字符串,也可以使用JsonUtils.safeEval()將其轉(zhuǎn)換回JSON字符串。 JavaScriptObject與代表JavaScriptObject集合的JsArray協(xié)同工作,并擴(kuò)展了JavaScriptObject。 該方法的唯一缺點(diǎn)是與創(chuàng)建對(duì)象相關(guān)聯(lián)的樣板。 例如:

public class Person extends JavaScriptObject {//Constructor needs to be protected and zero-argumentsprotected Person() { }// JSNI is used for setting/getting properties public final native String getFirstName() /*-{ return this.FirstName; }-*/;public final native String getLastName() /*-{ return this.LastName; }-*/;public final native void setFirstName(String firstName) /*-{ this.FirstName = firstName; }-*/;public final native void setLastName(String lastName) /*-{ this.LastName = lastName; }-*/; }

然后:

Person person = JavaScriptObject.createObject().cast();JsArray array = JavaScriptObject.createArray().cast();person.setFirstName("first Name");person.setLastName("last Name");array.push(person);GWT.log(JsonUtils.stringify(person));GWT.log(JsonUtils.stringify(array));

結(jié)果:

{"FirstName":"first Name","LastName":"last Name"} [{"FirstName":"first Name","LastName":"last Name"}]

使用JsInterop批注:

JsInterop批注允許將Java類(lèi)型/類(lèi)視為Javascript對(duì)象,并允許向/從應(yīng)用程序Js環(huán)境導(dǎo)出或?qū)牍δ堋?一些GWT項(xiàng)目成員( Thomas Broyer , Jens Nehlmeier )建議使用JsInterop,因?yàn)镴sInterop是GWT未來(lái)的重要組成部分,它將成為處理GWT中Javascript對(duì)象的主要方法。 使用JsInterop的唯一缺點(diǎn)是Elemental 2仍處于實(shí)驗(yàn)階段,因此直到它變得穩(wěn)定為止。 開(kāi)發(fā)人員最好將自己的代碼片段用于本地Javascript實(shí)用程序(例如Json類(lèi)),例如:

@JsType(isNative=true, namespace=GLOBAL) public class JSON {public native static String stringify(Object obj);public native static Object parse(String obj);}

如果我們的對(duì)象看起來(lái)像:

@JsType(isNative=true, namespace=GLOBAL, name="Object") public class Record {String id;String date;String data;public Record() {}}

然后 :

Record record = new Record();record.id = "1";record.date = "20";record.data = "30";String json = JSON.stringify(recod);GWT.log(json); // Result: {"id":"1","date":"20","data":"30"}

Autorest -gwt (也是進(jìn)行HTTP調(diào)用的選項(xiàng)之一)使用JsInterop在發(fā)出HTTP請(qǐng)求之前對(duì)對(duì)象進(jìn)行序列化/序列化。

重要的是要注意 ,地圖不是由JSON.stringify()方法處理的,嘗試對(duì)地圖進(jìn)行字符串化將引發(fā)以下錯(cuò)誤:

Map mapTest = new HashMap();mapTest.put("v1", "v2");mapTest.put("v3", "v4");GWT.log(JSON.stringify(mapTest));Uncaught TypeError: Converting circular structure to JSON

轉(zhuǎn)換Collection(例如ArrayList)不會(huì)引發(fā)任何錯(cuò)誤,但是會(huì)創(chuàng)建開(kāi)發(fā)人員希望擺脫的其他JSON字段:

List test2 = new ArrayList();test2.add(record2);test2.add(record);GWT.log(JSON.stringify(test2));

結(jié)果:

{"array_3_g$":[{"id":"1","date":"50","data":"90"},{"id":"1","date":"20","data":"30"}]}

GWT編譯器出于某種原因添加了“ array_3_g $”,因此用戶(hù)需要找到一種方法將其刪除以進(jìn)行干凈的轉(zhuǎn)換,例如:

{[{"id":"1","date":"50","data":"90"},{"id":"1","date":"20","data":"30"}]}

到目前為止,Plain Arrays是唯一可以正確轉(zhuǎn)換的結(jié)構(gòu)。

帶走

在這三種方法中,JsInterop似乎是處理JSON的最可行方法。 目前主要關(guān)注的是處理諸如Collections和Maps之類(lèi)的對(duì)象,這些對(duì)象需要開(kāi)發(fā)人員進(jìn)行進(jìn)一步的手動(dòng)處理。 Plain Arrays是目前唯一可以正確轉(zhuǎn)換的結(jié)構(gòu),因此開(kāi)發(fā)人員可以嘗試簡(jiǎn)化或轉(zhuǎn)換為Plain Arrays進(jìn)行干凈轉(zhuǎn)換。

JavaScriptObject提供了自己的使用JsArray處理“列表”的方式。 現(xiàn)在,gwt-jackson仍然是提供開(kāi)箱即用的“收藏夾”和“地圖”轉(zhuǎn)換的唯一選項(xiàng)。

翻譯自: https://www.javacodegeeks.com/2017/07/serializingdeserializing-json-gwt.html

敏捷中g(shù)wt含義

總結(jié)

以上是生活随笔為你收集整理的敏捷中gwt含义_在GWT中序列化/反序列化Json的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。