敏捷中gwt含义_在GWT中序列化/反序列化Json
敏捷中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)題。
- 上一篇: 丽水市属于哪个省
- 下一篇: tdd 单元测试_何时给定在单元测试和T