JSON 用于 POJO,反之亦然用于 GWT

JSON to POJO and vise-versa for GWT

我的应用程序使用通用 模型 集成为多个应用程序的依赖项。其中一个应用程序依赖于 模型 通过 Restlet 建立 Restlet 连接:

ClientResource res = new ClientResource("/path");
            res.setOnResponse(new Uniform() {
                @Override
                public void handle(Request request, Response response) {
                    try {
                        if(!response.getStatus().isError()){
                           String body = response.getEntity().getText();
                          // do stuff with Response JSON
                        } else {

                        }
                    } catch (IOException e) {
                       // handle error
                    }
                }
            });
res.post(new JsonRepresentation(MediaType.APPLICATION_JSON, jsonObject));

我有两个问题,

  1. 有没有一种直接的方法可以将 POJO 编组到 GWT 中的 com.google.gwt.json.client.JSONObject 以与上面的 res.post 一起使用
  2. 有没有一种直接的方法可以使用 GWT 将 JSON 字符串编组到 POJO 中?

这既适用于上面的 ClientResource,也不会诉诸于使用 GWT 覆盖类型,因为我们已经在客户端和服务器端共享了一个模型。直截了当的东西。

  1. 据我所知,没有自动且简单的方法可以将 POJO 转换为 JSONObjects。您很可能必须手动完成。然而,JsonRepresentation 构造函数接受 JSON 字符串,因此您可以使用其中一个备选方案(参见第 2 点)
  2. 有几种更简单的方法可以将 POJO 转换为 JSON:

我想如果你有通用的 POJO,最简单的解决方案就是使用 AutoBeans。您将为每个 POJO 定义一个包含所有 setter 和 getter 的接口,并让 POJO 实现这些接口。

Restlet 不支持开箱即用的 bean / JSON 转换。如果您想在 Restlet 中使用 beans,您应该使用原生的 GWT 协议。它是选择 Restlet 用于其 GWT 实现的指南。您可以在 Restlet 中启用内容类型和 select 您想要的内容协商(GWT RPC 用于 GWT 客户端,JSON 用于其他客户端)。

也就是说,我理解你的做法。在 GWT RPC 的情况下,Restlet 利用生成器功能直接在 bean 上工作(参见 class https://github.com/restlet/restlet-framework-java/blob/master/modules/org.restlet/src/org/restlet/rebind/ClientProxyGenerator.java.gwt). The generator only support the media type for GWT RPC but could be extended to handle other media types like JSON. Notice that such approach is tricker that the one provided by Ümit 的答案。

希望它能给你一些提示来解决你的问题, 蒂埃里