文档章节

RestyGWT简介

GoingHigh
 GoingHigh
发布于 2013/04/25 10:26
字数 612
阅读 135
收藏 0

定义: RestyGWT是一个REST服务GWT生成器和Java Object JSON数据格式转换引擎。它能够生成基于JSON的异步Restful服务代理,提供易于使用的REST API。

REST Services

RestyGWT的 Rest Services能够生成基于JSON的异步Restful服务,和GWT中的异步类似:

public interface PizzaService extends RestService {
    @POST
    public void order(PizzaOrder request, 
                      MethodCallback<OrderConfirmation> callback);
}

@POST:表示以POST方式向Server端发送数据,server端的servlet具体实现时应该是doPost()。

Java beans可以通过JSON的编码和解码向Server端发送和从server端返回,以PizzaOrder为例:

public class PizzaOrder {
    public String phone_number;
    public boolean delivery;
    public List<String> delivery_address = new ArrayList<String>(4);
    public List<Pizza> pizzas = new ArrayList<Pizza>(10);
}
JSON形式:
{
  "phone_number":null,
  "delivery":true,
  "delivery_address":[
    "3434 Pinerun Ave.",
    "Wesley Chapel, FL 33734"
  ],
  "pizzas":[
    {"quantity":1,"size":16,"crust":"thin","toppings":["ham","pineapple"]},
    {"quantity":1,"size":16,"crust":"thin","toppings":["extra cheese"]}
  ]
}

在GWT的客户端调用server端服务:

1. 创建一个REST service 的实例,并和HTTP URL关联起来。示例代码如下:

Resource resource = new Resource( GWT.getModuleBaseURL() + "pizza-service");
PizzaService service = GWT.create(PizzaService.class);
((RestServiceProxy)service).setResource(resource);
service.order(order, callback);
2. 使用Rest API

Resource resource = new Resource("http://search.yahooapis.com/WebSearchService/V1/webSearch?appid=YahooDemo&query=finances&format=pdf&output=json&callback=callback");
 resource.jsonp().send(new JsonCallback() {
            public void onSuccess(Method method, JSONValue response) {
                JSONObject obj = (JSONObject) ((JSONObject) response).get("ResultSet");
                RootPanel.get().add(new Label("Search Results Available: " + obj.get("totalResultsAvailable")));
            }

            public void onFailure(Method method, Throwable exception) {
                Window.alert("Error x: " + exception);
            }
        });

JSON Encoder/Decoders

要实现Java Object与JSON数据格式转换,必须定义一个接口来继承JsonEncoderDecoder接口,这样RestyGWT就可以实现Java Object与JSON数据的转换了,使用encode和decode方法即可。 示例:

1. 首先,定义接口:

public interface PizzaOrderCodec  extends JsonEncoderDecoder<PizzaOrder> {
}
2. 使用encode和decode方法:

// GWT will implement the interface for you
PizzaOrderCodec codec = GWT.create(PizzaOrderCodec.class);

// Encoding an object to json
PizzaOrder order = ... 
JSONValue json = codec.encode(order);

// decoding an object to from json
PizzaOrder other = codec.decode(json);

REST API

RestyGWT提供了易于使用的REST API,支持所有的HTTP methods,在调用过程中用参数来设置HTTP Accept 和 Content-Type header,并且可以设置response code和request timeout。 示例:

Resource resource = new Resource( GWT.getModuleBaseURL() + "pizza-service");
JSONValue request = ...
resource.post().json(request).send(new JsonCallback() {
    public void onSuccess(Method method, JSONValue response) {
        System.out.println(response);
    }
    public void onFailure(Method method, Throwable exception) {
        Window.alert("Error: "+exception);
    }
});

每次请求时必须创建一个新的Method 对象,由下面的HTTP methods产生:

resource.head(); resource.get(); resource.put(); resource.post(); resource.delete()

可以通过下面的方法来设置Content-Type header:

method.text(String data)       // HTTP request body为text
method.xml(Document data)       // HTTP request body为xml
method.json(JSONValue data)      // HTTP request body为json
可以通过下面的方法来设置Accept header(与Content-Type 类似):

method.send(TextCallback callback)
method.send(JsonCallback callback)
method.send(XmlCallback callback)


© 著作权归作者所有

共有 人打赏支持
GoingHigh
粉丝 16
博文 11
码字总数 4925
作品 0
朝阳
程序员
私信 提问
Elasticsearch插件大全

Elasticsearch扩展性非常好,有很多官方和第三方开发的插件,下面以分词、同步、数据传输、脚本支持、站点、其它这几个类别进行划分。 分词插件 Combo Analysis Plugin (作者 Olivier Favre,...

阿姆斯特芬
2018/01/08
0
0
HTML前端开发之路——多列布局

利用多列布局的属性可以轻松的为文字或者图片添加瀑布流效果; 首先看一下多列布局的属性总览: column-width属性简介 2.column-count属性简介 3.column属性简介 4.column-gap属性简介 5.co...

LeslieMay
2016/02/12
88
0
HTML前端开发之路——弹性盒模型

弹性盒模型(Flexible Box)是一个CSS3新增布局模块,用于实现容器里项目的对齐、方向、排序; 弹性盒模型最大的特效在于,能够动态的修改子元素的宽度和高度,以满足在不同尺寸屏幕下的恰当...

LeslieMay
2016/02/12
143
0
没有任何秘密的 API:Vulkan* 简介

Vulkan 被视作是 OpenGL 的后续产品。 它是一种多平台 API,可支持开发人员准备游戏、CAD 工具、性能基准测试等高性能图形应用。 它可在不同的操作系统(比如 Windows、Linux 或 Android*)上...

IDZPRC
昨天
0
0
值得收藏!国外最佳互联网安全博客TOP30

如果你是网络安全从业人员,其中重要的工作便是了解安全行业的最新资讯以及技术趋势,那么浏览各大安全博客网站或许是信息来源最好的方法之一。最近有国外网站对50多个互联网安全博客做了相关...

刀剑如梦
2016/11/24
35
0

没有更多内容

加载失败,请刷新页面

加载更多

3.系统和内存架构

在设计程序或并发系统时,需要考虑不同的系统和内存架构风格。 支持并发的计算机系统体系结构 1972年,迈克尔弗林(Michael Flynn)给出了用于分类不同风格计算机系统体系结构的分类法。 该分类...

Eappo_Geng
20分钟前
1
0
今天的学习

1,getimagesize:获得目标图像的大小 2,image_type_to_extension:获得目标文件的后缀信息 3,imagealphablending:设定目标图像混色的模式 4,imagechar:水平的画出一个字符 5,imagecharup...

墨冥
23分钟前
1
0
Java线程中yield与join方法的区别

长期以来,多线程问题颇为受到面试官的青睐。虽然我个人认为我们当中很少有人能真正获得机会开发复杂的多线程应用(在过去的七年中,我得到了一个机会),但是理解多线程对增加你的信心很有用。...

飓风2000
47分钟前
3
0
Python的 is 和 == 弄懂了吗?

在Python中一切都是对象。 Python中对象包含的三个基本要素,分别是: id(身份标识) type(数据类型) value(值) 对象之间比较是否相等可以用 == ,也可以用 is 。 is 和 == 都是对对象进行比较...

上海小胖
47分钟前
2
0
angularJS 路由加载js controller 未定义 解决方案

说明 本文主要说明,在angularJS框架使用中,angularJS 路由加载js controller 未定义 解决方案。 路由 $routeProvider 异步加载js 路由的基本用法,请查看官方文档,下面实例只说明,懒加载...

DrChenXX
55分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部