敏捷中gwt含义

JSON和GWT

最近, GWT用户小组中进行了有趣的讨论 ,涉及在客户端对JSON进行序列化/反序列化的最佳实践。 这篇文章旨在突出其重点。 到目前为止,在GWT中有三种将对象转换为JSON并从客户端转换回JSON的方法:

gwt-jackson框架:

gwt-jackson包装了著名的杰克逊图书馆的某些功能。 它允许使用称为ObjectMapper的接口转换对象。 使用gwt-jackson的优点在于,它可以序列化诸如Collections和Maps之类的复杂对象。 它还允许使用@JsonProperty和@JsonCreator之类的注释进行花式转换。 gwt-jackson的唯一遗憾是它使用了Generators ,在GWT 3.0版中将弃用该工具。 还值得注意的是RestyGWT使用了gwt-jackson,这是从客户端发出HTTP请求的替代方法之一。

可以在Github页面上找到示例: https : //github.com/nmorel/gwt-jackson/tree/master/examples

使用JavaScriptObject:

这是传统方法之一。 JavaScriptObject利用JSNI创建一个普通的JS对象。 它可以扩展并具有cast()方法,该方法允许将对象“安全”投射到其子类型。 可以使用JsonUtils.stringify()方法将JavaScriptObject转换为JSON字符串,也可以使用JsonUtils.safeEval()将其转换回JSON字符串。 JavaScriptObject与代表JavaScriptObject集合的JsArray协同工作,并扩展了JavaScriptObject。 该方法的唯一缺点是与创建对象相关联的样板。 例如:

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

结果:

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

使用JsInterop批注:

JsInterop批注允许将Java类型/类视为Javascript对象,并允许向/从应用程序Js环境导出或导入功能。 一些GWT项目成员( Thomas Broyer , Jens Nehlmeier )建议使用JsInterop,因为JsInterop是GWT未来的重要组成部分,它将成为处理GWT中Javascript对象的主要方法。 使用JsInterop的唯一缺点是Elemental 2仍处于实验阶段,因此直到它变得稳定为止。 开发人员最好将自己的代码片段用于本地Javascript实用程序(例如Json类),例如:

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

如果我们的对象看起来像:

@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 (也是进行HTTP调用的选项之一)使用JsInterop在发出HTTP请求之前对对象进行序列化/序列化。

重要的是要注意 ,地图不是由JSON.stringify()方法处理的,尝试对地图进行字符串化将引发以下错误:

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

转换Collection(例如ArrayList)不会引发任何错误,但是会创建开发人员希望摆脱的其他JSON字段:

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

结果:

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

GWT编译器出于某种原因添加了“ array_3_g $”,因此用户需要找到一种方法将其删除以进行干净的转换,例如:

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

到目前为止,Plain Arrays是唯一可以正确转换的结构。

带走

在这三种方法中,JsInterop似乎是处理JSON的最可行方法。 目前主要关注的是处理诸如Collections和Maps之类的对象,这些对象需要开发人员进行进一步的手动处理。 Plain Arrays是目前唯一可以正确转换的结构,因此开发人员可以尝试简化或转换为Plain Arrays进行干净转换。

JavaScriptObject提供了自己的使用JsArray处理“列表”的方式。 现在,gwt-jackson仍然是提供开箱即用的“收藏夹”和“地图”转换的唯一选项。

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

敏捷中gwt含义

敏捷中gwt含义_在GWT中序列化/反序列化Json相关推荐

  1. final在java中的含义_在java中一个类被声明为final类型,表示的意思是()

    案例分析一:假定CPU的主频是500MHz.硬盘采用DMA方式进行数据传送,其数据传输率为4MB/s, 每次DMA传输的数据量为8KB, 要求没有任何数据传输被错过. 如果CPU在DMA初始化设置和启 ...

  2. 敏捷中gwt含义_在您的GWT应用程序中添加JSON功能

    敏捷中gwt含义 JSON简介 在Web应用程序上工作时,总是会出现客户端-服务器数据交换的问题. 在此问题上有多种方法,其中许多使用XML进行交换. 执行此任务的一种不太知名的格式是JSON. JS ...

  3. 在GWT中序列化/反序列化Json

    JSON和GWT 最近, GWT用户小组中进行了有趣的讨论 ,涉及在客户端对JSON进行序列化/反序列化的最佳实践. 这篇文章旨在突出其重点. 到目前为止,在GWT中有三种将对象转换为JSON并从客户 ...

  4. java中访问控制修饰符什么含义_关于Java中访问控制修饰符的来由及浅解

    在Java中,制作者为我们提供了一种非常简洁方便地分类管理工作中需要用到的类的概念,就是"包".既然有了这个包,那么我们编写的类就存在于这个定义好的包中了.由于需求的限制,大部分类 ...

  5. gwt格式_活性GWT

    gwt格式 介绍 在过去的4到5年中,React式编程的普及程度得到了极大的提高. 这可以告诉我们,React性应用程序的用例现在比以往任何时候都有效. 后端系统上的压力已经增加,因此需要用最少的资源 ...

  6. python删除字符串中重复字符_从Python中删除字符串标点符号的最佳方法

    似乎有一个比以下更简单的方法: 1 2 3import string s ="string. With. Punctuation?" # Sample string out = s ...

  7. python3中format方法_[翻译]python3中新的字符串格式化方法-----f-string

    从python3.6开始,引入了新的字符串格式化方式,f-字符串. 这使得格式化字符串变得可读性更高,更简洁,更不容易出现错误而且速度也更快. 在本文后面,会详细介绍f-字符串的用法. 在此之前,让我 ...

  8. 中如何计算工龄_在Substrate中如何计算交易权重

    建议在阅读本文之前,先掌握关于Substrate中交易费用设计的基本概念.如果还没有了解的童鞋,请移步: Kaichao:Substrate 区块链应用的交易费用设计​zhuanlan.zhihu.c ...

  9. 中lisp文件_关于 Emacs 中的变量你需要知道的事情 | Linux 中国

    学习 Elisp 是如何处理变量的,以及如何在你的脚本与配置中使用它们. 来源:https://linux.cn/article-12150-1.html 作者:Clemens Radermacher ...

最新文章

  1. C#量转换为汉字表达
  2. Linux设备驱动程序 第三版 读书笔记(一)
  3. PAT甲级1052 Linked List Sorting:[C++题解]链表排序
  4. jQuery动画的显示与隐藏效果!
  5. C/C++学习之路: 智能指针
  6. html文件怎么导出stl文件,各种3D建模软件导出STL文件的小技巧(一)
  7. End User 访问SharePoint URL获取数据流程
  8. QT每日一练day26:绘制图片
  9. VISTA中注册表项LEGACY_****的删除--另一种方法:使用psExec
  10. JAVA刺客信条大革命_黑色沙漠单机版
  11. 小程序打通了用户到店的最后一步!
  12. 攻防世界-logmein
  13. [软件工程] 千帆竞发图的制作
  14. OpenAI 开源语音识别模型 Whisper 初体验
  15. “室友靠这个拿到了华为50万年薪,太牛逼了…”
  16. 并行计算求pi值C语言,使用并行计算求圆周率π.pdf
  17. RabbitMq 消息中间件介绍初体验
  18. 获取所有复选框选中状态的id
  19. js根据name获取所有的值
  20. kafka消息过期时间设置(全局和特定topic)

热门文章

  1. P4357-[CQOI2016]K远点对【K-Dtree】
  2. P4161-[SCOI2009]游戏【dp】
  3. P3369-[模板]普通平衡树【有旋Treap】
  4. 【线段树】Optimal Insertion(CF751E)
  5. 【并查集】家族 (ssl 1896)
  6. [XSY3112] 接水果(树上包含路径,整体二分,扫描线)
  7. 线段树专题-黑白棋盘 BZOJ-1453
  8. Nacos(六)之Spring Boot集成
  9. 今日头条大佬十年面试了 2000 人,总结了这 5 点
  10. 利用bladex+avue实现一对多的关系