RestyGWT简介

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

REST Services

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

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

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

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

1public class PizzaOrder { 2 public String phone_number; 3 public boolean delivery; 4 public List<String> delivery_address = new ArrayList<String>(4); 5 public List<Pizza> pizzas = new ArrayList<Pizza>(10); 6} 7JSON形式: 8{ 9 "phone_number":null, 10 "delivery":true, 11 "delivery_address":[ 12 "3434 Pinerun Ave.", 13 "Wesley Chapel, FL 33734" 14 ], 15 "pizzas":[ 16 {"quantity":1,"size":16,"crust":"thin","toppings":["ham","pineapple"]}, 17 {"quantity":1,"size":16,"crust":"thin","toppings":["extra cheese"]} 18 ] 19}

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

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

1Resource resource = new Resource( GWT.getModuleBaseURL() + "pizza-service"); 2PizzaService service = GWT.create(PizzaService.class); 3((RestServiceProxy)service).setResource(resource); 4service.order(order, callback);

2. 使用Rest API

1Resource resource = new Resource("http://search.yahooapis.com/WebSearchService/V1/webSearch?appid=YahooDemo&query=finances&format=pdf&output=json&callback=callback"); 2 resource.jsonp().send(new JsonCallback() { 3 public void onSuccess(Method method, JSONValue response) { 4 JSONObject obj = (JSONObject) ((JSONObject) response).get("ResultSet"); 5 RootPanel.get().add(new Label("Search Results Available: " + obj.get("totalResultsAvailable"))); 6 } 7 8 public void onFailure(Method method, Throwable exception) { 9 Window.alert("Error x: " + exception); 10 } 11 });

JSON Encoder/Decoders

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

1. 首先,定义接口:

1public interface PizzaOrderCodec extends JsonEncoderDecoder<PizzaOrder> { 2}

2. 使用encode和decode方法:

1// GWT will implement the interface for you 2PizzaOrderCodec codec = GWT.create(PizzaOrderCodec.class); 3 4// Encoding an object to json 5PizzaOrder order = ... 6JSONValue json = codec.encode(order); 7 8// decoding an object to from json 9PizzaOrder other = codec.decode(json);

REST API

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

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

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

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

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

1method.text(String data) // HTTP request body为text 2method.xml(Document data) // HTTP request body为xml 3method.json(JSONValue data) // HTTP request body为json

可以通过下面的方法来设置Accept header(与Content-Type 类似):

1method.send(TextCallback callback) 2method.send(JsonCallback callback) 3method.send(XmlCallback callback)
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java将前端的json数组字符串转换为列表

记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang

swap空间的增减方法

(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap