我使用GWT作为Web开发框架。我需要从我的GWT客户端代码访问一些REST服务。此外,我需要解析这些服务的响应格式JSON(或可能是XML)。哪个是解决这个问题的最好方法?如何从GWT调用RESTFUL服务?
在此先感谢。
我使用GWT作为Web开发框架。我需要从我的GWT客户端代码访问一些REST服务。此外,我需要解析这些服务的响应格式JSON(或可能是XML)。哪个是解决这个问题的最好方法?如何从GWT调用RESTFUL服务?
在此先感谢。
您可以使用标准的GWT RequestBuilder
(或JsonpRequestBuilder
如果你需要调用服务的另一个域)调用REST服务。
随着JSON响应字符串,你可以调用JSONParser.parseStrict(jsonString)
获得JSONValue
,它可以是一个JSONObject
,JSONArray
等,这是在this package一应俱全。
import javax.ws.rs.POST;
...
public interface PizzaService extends RestService {
@POST
public void order(PizzaOrder request,
MethodCallback<OrderConfirmation> callback);
}
,或者当你不想去通过创建服务接口的麻烦:
您可以轻松地通过创建代理服务接口调用使用RestyGWT一个RESTful Web服务在您的GWT应用程序
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对象到JSON。
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)。您可以按需使用您的服务。的代码中使用RequestBuilder
他们重新命名为“Requestor”https://github.com/reinert/requestor – 2015-09-17 13:54:46
的下方源后使用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();
}
宁静-GWT如何调用RESTful服务到RESTful Web服务的请求。我在项目文档中看不到例子。 – ovunccetin 2010-10-27 10:24:58
抱歉,添加了错误的链接。我的意思是gwt-rest。 – z00bs 2010-10-27 11:09:49