欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

RestyGWT简介

程序员文章站 2024-01-26 08:46:11
...

定义: 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)
 
相关标签: GWT