2010-10-27 35 views
19

Tôi đang sử dụng GWT làm khung phát triển web. Tôi cần truy cập một số dịch vụ REST từ mã máy khách GWT của tôi. Ngoài ra tôi cần phải phân tích cú pháp JSON (hoặc có thể XML) là định dạng phản hồi của các dịch vụ này. Đó là cách tốt nhất cho vấn đề này?Cách gọi các dịch vụ RESTFUL từ GWT?

Xin cảm ơn trước.

Trả lời

14

Bạn có thể gọi các dịch vụ REST sử dụng chuẩn GWT RequestBuilder (hoặc JsonpRequestBuilder nếu bạn cần phải gọi dịch vụ trên tên miền khác).

Với chuỗi phản ứng JSON, bạn có thể gọi JSONParser.parseStrict(jsonString) để có được một JSONValue, mà có thể là một JSONObject, JSONArray, vv Điều này là tất cả có sẵn trong this package.

2

Đối với dịch vụ REST: checkout gwt-rest.

Để được hỗ trợ JSON trong GWT: xem here

+0

Làm thế nào yên tĩnh-gwt gọi một dịch vụ yên tĩnh. Tôi không thể thấy một ví dụ trong tài liệu dự án. – ovunccetin

+0

xin lỗi, đã thêm liên kết sai. Tôi có nghĩa là gwt-phần còn lại. – z00bs

7

Bạn có thể dễ dàng gọi một dịch vụ web RESTful sử dụng RestyGWT trong ứng dụng GWT của bạn bằng cách tạo ra giao diện dịch vụ proxy:

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

hoặc khi bạn không muốn phải trải qua những rắc rối của việc tạo ra các giao diện dịch vụ:

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); 
    } 
}); 

Nó cũng có API tốt để mã hóa và giải mã Java Object thành JSON.

2

RequestBuilder là phương pháp cấp thấp để thực hiện yêu cầu HTTP.

Bạn có thể sử dụng phương pháp tiếp cận cấp cao hơn khi làm việc với Turbo GWT HTTP, một API thuận tiện để quản lý yêu cầu giao tiếp và thực hiện máy khách-máy chủ lưu loát.

Nó phù hợp hơn với giao tiếp kiểu REST. Hãy xem xét ví dụ sau:

Request request = requestor.request(Void.class, Book.class) 
     .path("server").segment("books").segment(1) 
     .get(new AsyncCallback<Book>() { 
      @Override 
      public void onFailure(Throwable caught) { 

      } 

      @Override 
      public void onSuccess(Book result) { 
       Window.alert("My book title: " + result.getTitle()); 
      } 
}); 

Không cần phải ánh xạ các dịch vụ REST của bạn trước khi gọi chúng (cần thiết cho giao tiếp RPC chứ không phải cho REST). Bạn chỉ có thể sử dụng dịch vụ theo yêu cầu.

+0

Họ đổi tên thành "Người yêu cầu" https://github.com/reinert/requestor –

2

Nguồn dưới đây của mã được sử dụng RequestBuilder để gửi một yêu cầu đến Webservice RESTful sử dụng GWT

JSONObject jsonObject = new JSONObject(); 

email = (String) vslLoginView.getFieldUserEmailID().getValue(); 
password = (String) vslLoginView.getFieldUserPasword().getValue(); 

jsonObject.put("email", new JSONString(email)); 
jsonObject.put("password", new JSONString(password)); 
System.out.println("Password at Presenter:" 
    + jsonObject.get("password")); 
RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, 
    RecursosURL.LOGIN.toString()/*your restful webservice url */ + "/authenticateuser"); 
builder.setHeader("Content-Type", "application/json"); 
try { 
    SC.showPrompt(constants.wait()); 
    builder.sendRequest(jsonObject.toString(), 
     new SamrtWebRequestCallback(false, false, false, false) { 

      @Override 
      public void onSuccess(Response response) { 
       // Recevie response of logged user data from restful webservice 
       JSONObject jsonOnlineUser = JSONParser.parse(
        response.getText()).isObject(); 
       UserTO userTO = ConverterUser 
        .converterJSONParaUser(jsonOnlineUser); 
       String primaryAccess = jsonOnlineUser.get(
        "primaryAccess").isString().stringValue(); 

       HashMap<String, Object> parameters = new HashMap<String, Object>(); 
       if (primaryAccess.equals("S")) { 

        parameters.put("email", email); 
        parameters.put("password", password); 
        parameters.put("id", jsonOnlineUser.get("id") 
         .isString().stringValue()); 

       } else { 

        parameters.put("email", email); 
        handlerManager.fireEvent(new EvtIrParaPage(
         Pages.PAGE_INICIAL, parameters)); 
       } 

      } 

      @Override 
      protected void onErrorCallbackAdapter(Response response) { 
       vslLoginView.getLabelMsgErro().setContents(
        response.getText()); 
       vslLoginView.getLabelMsgErro().setVisible(true); 
      } 
     }); 

} catch (RequestException e) { 
    e.printStackTrace(); 
} 
Các vấn đề liên quan