JSON到POJO,反之亦然GWT

时间:2015-03-24 19:57:14

标签: java gwt restlet

我的应用程序使用常见的 Models 作为多个应用程序的依赖项集成。其中一个依赖于 Models 的应用程序通过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. 是否有一种直接的方法将JSON字符串编组到带有GWT的POJO中?
  3. 这既适用于上面的ClientResource,也不适用于使用GWT Overlay类型,因为我们已经在客户端和服务器端共享了Model。一些直截了当的东西。

2 个答案:

答案 0 :(得分:0)

  1. AFAIK没有自动简便的方法将POJO转换为JSONObject。很可能你必须手工完成。然而,JsonRepresentation构造函数接受JSON字符串,因此您可以使用替代方法(参见第2点)
  2. 有几种更简单的方法可以将POJO转换为JSON:
  3. 我想如果您有共同的POJO,最简单的解决方案就是使用AutoBeans。您将为每个POJO定义一个包含所有setter和getter的接口,并让POJO实现这些接口。

答案 1 :(得分:0)

Restlet不支持bean / JSON转换。如果要在Restlet中使用bean,则应使用本机GWT协议。它是选择Restlet实现GWT的指导。您可以在Restlet中启用内容类型,并通过内容协商选择所需的内容类型(GWT客户端为GWT RPC,其他人为JSON)。

那就是说,我了解你的做法。在GWT RPC的情况下,Restlet利用生成器功能直接处理bean(请参阅此类https://github.com/restlet/restlet-framework-java/blob/master/modules/org.restlet/src/org/restlet/rebind/ClientProxyGenerator.java.gwt)。生成器仅支持GWT RPC的媒体类型,但可以扩展为处理其他媒体类型,如JSON。请注意,这种方法是Ümit在答案中提供的方法。

希望它能给你一些解决问题的提示, 亨利