Подтвердить что ты не робот

Как позвонить RESTFUL услугам из GWT?

Я использую GWT как основу для веб-разработки. Мне нужно получить доступ к некоторым службам REST из моего кода клиента GWT. Также мне нужно проанализировать JSON (или, возможно, XML), который является ответом на эти службы. Каков наилучший способ для этой проблемы?

Спасибо заранее.

4b9b3361

Ответ 1

Вы можете вызвать службы REST с помощью стандартного GWT RequestBuilder (или JsonpRequestBuilder, если вам нужно вызвать службы в другом домене).

С помощью строки ответа JSON вы можете вызвать JSONParser.parseStrict(jsonString), чтобы получить JSONValue, который может быть JSONObject, JSONArray и т.д. Это все доступно в этот пакет.

Ответ 2

С помощью RestyGWT в приложении GWT вы можете легко вызвать веб-службы Restful, создав прокси-сервисный интерфейс:

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

или когда вы не хотите беспокоиться о создании сервисных интерфейсов:

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

Он также получил хороший API для кодирования и декодирования Java Object для JSON.

Ответ 3

Для служб REST: checkout gwt-rest.

Поддержка JSON в GWT: см. здесь

Ответ 4

RequestBuilder - это низкоуровневый подход для запросов HTTP.

Вы можете прибегнуть к более высокоуровневому подходу, работающему с Turbo GWT HTTP, удобным API для управления связью и выполнением запросов клиент-сервер.

Он лучше подходит для общения в стиле REST. Рассмотрим следующий пример:

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

Нет необходимости сопоставлять ваши службы REST перед их вызовом (что концептуально требуется для связи RPC, но не для REST). Вы можете просто использовать ваши услуги по запросу.

Ответ 5

Ниже источник кода, используемый RequestBuilder для отправки запроса в RESTFUL Webservice с использованием 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();
}