2010-10-27 26 views
19

Estoy usando GWT como marco de desarrollo web. Necesito acceder a algunos servicios REST desde mi código de cliente GWT. También necesito analizar JSON (o tal vez XML), que es el formato de respuesta de estos servicios. ¿Cuál es la mejor manera de resolver este problema?¿Cómo llamar a servicios RESTFUL de GWT?

Gracias de antemano.

Respuesta

14

Usted puede llamar a los servicios REST utilizando el estándar GWT RequestBuilder (o JsonpRequestBuilder si es necesario llamar a los servicios de otro dominio).

Con la cadena de respuesta JSON, puede llamar JSONParser.parseStrict(jsonString) para obtener una JSONValue, que puede ser un JSONObject, JSONArray, etc. Todo esto está disponible en this package.

2

Para servicios REST: pago gwt-rest.

Para soporte JSON en GWT: ver here

+0

Cómo reparador-GWT llama a un servicio reparador. No pude ver un ejemplo en la documentación del proyecto. – ovunccetin

+0

lo siento, se agregó un enlace erróneo. Quise decir gwt-rest. – z00bs

7

Puede llamar fácilmente un descanso reparador servicios web utilizando RestyGWT en su aplicación GWT mediante la creación de interfaz de servicio de proxy:

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

o cuando no quieren pasar por la molestia de crear interfaces de servicio:

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

También tiene una buena API para codificar y decodificar objetos Java a JSON.

2

RequestBuilder es un enfoque de bajo nivel para realizar solicitudes HTTP.

Puede recurrir a un enfoque de nivel superior trabajando con Turbo GWT HTTP, una API conveniente para administrar la comunicación cliente-servidor y realizar solicitudes con fluidez.

Se adapta mejor a la comunicación de estilo REST. Consideremos el siguiente ejemplo:

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

No hay necesidad de asignar los servicios REST antes de llamar a ellos (que es conceptualmente necesario para la comunicación RPC, pero no para REST). Simplemente puede consumir sus servicios a pedido.

+0

Se vuelven a vincular a "Solicitante" https://github.com/reinert/requestor –

2

La fuente de abajo del código utilizado RequestBuilder para enviar una solicitud de servicio web RELAJANTE usando 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(); 
} 
Cuestiones relacionadas