问题标签 [autobean]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1575 浏览

java - GWT AutoBean:注解 @PropertyName 不再起作用

我使用AutoBean将数据编码/解码为 JSON,这在以前的 GWT 版本中是可以的。在我看来,AutoBean 是处理 JSON 的非常好的和方便的工具。自 GWT 2.4.0 版以来,此功能发生了变化,我花了一些时间在我的代码中恢复它。但只有一部分仍未修复——注解@PropertyName。此注释用于向属性添加“别名”。它节省了大量的网络流量。现在它抛出一个异常。代码示例如下:

然后我尝试以这种方式将其解码为 JSON:

这段代码在遗留代码中完美运行。但是现在(在 GWT 2.4.0 中)我得到了一个例外:

如果我从界面中删除 @PropertyName,则不会发生异常。

我仍在等待官方文档将被更新,但它仍然保留旧代码示例。

有人可以帮我解决这个问题吗?谢谢你的建议。

我使用 GWT 版本。2.4.0,GAE 版本。1.6.1.

0 投票
2 回答
3307 浏览

json - GWT 将 RPC 转换为 JSON

我的应用程序使用 GWT-RPC 与服务器通信。无论如何在不更改 RPC 层的情况下使用 JSON 透明地序列化我的数据吗?

恕我直言,这可以通过更改序列化程序并在 UI 中使用 autobean codex 来实现。

为什么我需要那个?

  • 我想进行跨域 RPC 调用
  • 我想从非 GWT 应用程序调用服务器端,而不在服务器端提供额外的层。
0 投票
1 回答
2653 浏览

json - 在 GWT 上使用 AutoBean 解析未知类型的 JSON 对象

我的服务器以 JSON 格式返回对象列表。例如,它们可能是Cats 或Dogs。

当我知道它们都将是Cats 时,我可以AutoBeanCodex轻松地将其设置为工作。但是,当我不知道它们是什么类型时……我该怎么办?

我可以给我的所有实体一个类型字段,但是我必须先解析每个实体,然后再将其传递给AutoBeanCodex,这几乎是失败的点。我还有什么其他选择?

0 投票
2 回答
881 浏览

gwt - 使用带有 HashMap 的 GWT 的 AutoBean 反序列化时出现 NullPointerException

我对 Google 的 AutoBean 序列化和反序列化有一些问题。我有一个包含原始类型和地图的 AutoBean。我可以毫无问题地序列化和反序列化原始类型,但是当我尝试读取反序列化的 Map 时,我得到 NullPointerException。你以前遇到过类似的问题吗?有一个代表我的问题的 JUnit 测试。前两个断言通过,但第三个失败。

0 投票
1 回答
900 浏览

java - 如何使用 GWT Autobeans 处理动态 JSON 数据?

目前我有一个类设置作为自动bean处理:

我尝试使用 Object 而不是 Serializable:

但这在尝试访问数据时似乎会爆炸(因为它没有“具体化”)。

元数据映射可能包含其他映射、字符串、整数等。如何从该元数据对象的内部映射中检索数据?

目前,如果我打电话给asset.getMetadata().get("title"); 这将返回一个 SerializableAutoBean 并在该对象上执行 toString() 或 String.valueOf(obj) 返回内存中的对象信息,而不是实际的字符串值。

AutoBean 对象可以是动态的,还是您必须专门定义每个字段?

0 投票
4 回答
2269 浏览

java - GWT 手动序列化服务器上​​的域对象

我的 GWT 应用程序加载时做的第一件事是通过 RequestFactory 从服务器请求当前登录的用户。这会阻塞,因为我需要用户的属性才能知道如何继续。这只需要 < 500 毫秒,但在这段时间内应用程序被阻止真的让我很恼火。我在生成jsp时已经在服务器上有了用户,那为什么不直接将序列化的用户添加到jsp中并完全消除这个请求呢?

我有两个问题阻止我这样做:

  • 我需要将 User 转换为 UserProxy
  • 我需要以一种易于 GWT 反序列化的方式序列化 UserProxy。

我还没有找到做#1的好方法。这个逻辑似乎埋在ServiceLayerDecorator中,没有简单的隔离方法?我在这里可能错了。

第二个通过ProxySerializer似乎更容易但是当我在服务器上时如何获得 requestfactory 呢?您不能GWT.create在服务器上调用。

我一直在研究AutoBeans,但这并不能处理上面的 #1。我的 UserProxy 引用了我想要维护的其他 EntityProxy 的集合。

0 投票
1 回答
576 浏览

gwt - 在 gwt 中支持 autobean 包装的原因是什么

我正在调查我的项目中 gwt autobeans 的使用情况。当我阅读这个组件时,我遇到了一个 autobean wrapping 的概念,但没有找到为什么要创建它的解释。到底有什么好处呢?我可以在哪里使用它?

0 投票
3 回答
1172 浏览

json - GWT Autobeans,将根级别解析为 Map 或 List

Autobeans 非常强大。然而,就我的一生而言,我无法弄清楚如何处理根级别的 JSON 映射或列表。

大多数文档建议您有一个已定义的顶级对象,该对象可以包含各种子对象(包括列表和地图),但没有关于自动生成地图或列表的文档。

以上是完成列表的参考方法,其中传入的数据将如下所示:

然而,我发现这很难看,REST 服务应该正确返回:

但我找不到使用 Autobean 框架处理此问题的简单方法。根级地图也是如此。

为什么这不起作用,是否有替代方法:

0 投票
1 回答
788 浏览

gwt - GWT 氛围 + RequestFactory

我想产生以下行为:

浏览器中的用户保存了一些实体。实体保存在服务器端后,它会生成通知,它必须通过 Atmosphere 通知所有其他客户端更新实体实例。

所以问题是我如何通过 Atmosphere 接口推送 POJO 实体?最后一个支持 Serializable 类型通过线路传输,而 RequestFactory 有另一种序列化机制。

所以我需要将 POJO 实体转换为 autobean,因为这是由 RF 完成并发送给客户端的。有人知道怎么做吗?

0 投票
1 回答
1176 浏览

java - Autobean 和 XSS 问题

Spring在后端有一个应用GWT程序,在前端有一个应用程序。当用户登录时,''index.jsp'' 会将用户信息作为 javascript 变量输出。

我正在使用AutoBeanFactory将用户信息编码和解码为 json。
因为用户可以注册并且用户信息存储在数据库中,所以我尝试通过在 JSP 页面中转义用户信息来遵循OWASP XSS 预防备忘单

我正在使用 esapi 库进行编码。服务器端代码如下所示:

我尝试使用encodeForHTMLand encodeForJavaScript()。这适用于普通字符,但是一旦我使用变音字符(ü、ä、ö),我就会遇到问题。

如果我使用该encodeforHTML()函数,则 javascript 变量如下所示(注意 firstname 有一个 ü):

使用 Autobean 解码工作正常,但字符 ü 未正确显示,但 HTML 转义了一个 ( &Uuml;ber)。

当我使用该encodeForJavaScript()功能时,输出如下:

当我尝试解码 JSON 字符串时,我遇到了一个奇怪的问题。在开发模式/托管模式下,解码工作正常,元音变音显示正确。但是,一旦我在生产模式下运行代码,我就会得到一个未捕获的异常:

我可以想到以下解决方案:

  1. 仅依赖输入验证(当数据存储在数据库中时)并删除输出编码。但这不是推荐的方法。
  2. 用普通的 ASCII 字符(ü => ue)替换 Umlaute 并继续使用输出编码
  3. 使用一些库来逃避 XSS 字符,但不考虑变音符号。

我很感谢一些反馈

更新:根据 Thomas 的建议,我现在JsoSplittable从 JSNI 传递一个,然后将其传递给AutoBeanCodex.decode函数。它在生产模式下运行良好,但在托管模式下我得到以下 NPE:

导致此异常的代码如下:

Window.alert(payload) 在生产模式下工作正常。在托管模式下,当我进入时,user.getPayload() 我会findOriginalDeclaringClassCompilingClassLoader.java. 似乎declaringClasses是空的