我試圖通過我的Restservice獲取數據。因此,我有我的彈簧控制器和我的休息服務。RestyGWT必須用JsonTypeInfo註釋
@Path("/user")
public interface UserAdminRestService extends RestService {
public static class Util {
private static UserAdminRestService instance;
/**
* Returns an instance of the {@link UserAdminRestService}.
* @return an instance of the UserAdminRestService.
*/
public static UserAdminRestService getUserAdminRestService() {
Resource resource = new Resource(GWT.getModuleBaseURL() + "user");
GWT.log("UserAdmin-Rescource-Path: "+resource.getPath());
if (instance == null) {
instance = GWT.create(UserAdminRestService.class);
}
((RestServiceProxy) instance).setResource(resource);
return instance;
}
}
@GET
@PATH("/test")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public void getUsers(MethodCallback<List<GWTUser>> callback);
}
GWTUser代表我的用戶實體。
public class GWTUser {
public interface GWTUserJED extends JsonEncoderDecoder<GWTUser> {
}
private String userId;
... // data
@Override
public String toString() {
if (GWT.isClient()) {
GWTUserJED jed = GWT.create(GWTUserJED.class);
return jed.encode(this).toString();
}
return super.toString();
}
}
而且我想它調用我的GWT應用程序:
HashMap<String, String> header = new HashMap<String, String>();
header.put(Resource.HEADER_ACCEPT, Resource.CONTENT_TYPE_JSON+"; charset=utf-8");
Resource resourceGetUsers = new Resource("/user/test", header);
UserAdminRestService.Util.getUserAdminRestService().getUsers(new MethodCallback<List<GWTUser>>() {
@Override
public void onFailure(Method method, Throwable exception) {
// TODO Auto-generated method stub
}
@Override
public void onSuccess(Method method, List<GWTUser> response) {
// TODO Auto-generated method stub
}
});
但是,當我試圖編譯我的應用我收到一條錯誤消息。
--- gwt-maven-plugin:2.5.1:compile (default-cli) @ myapp-admin-gwt ---
auto discovered modules [com.myapp.admin.gwt]
Compiling module com.myapp.admin.gwt
Computing all possible rebind results for 'com.myapp.admin.rest.UserAdminRestService'
Rebinding com.myapp.admin.rest.UserAdminRestService
Invoking generator org.fusesource.restygwt.rebind.RestServiceGenerator
Generating: com.myapp.admin.rest.UserAdminRestService_Generated_RestServiceProxy_
Generating: com.google.gwt.http.client.Response_Generated_JsonEncoderDecoder_
[ERROR] Abstract classes must be annotated with JsonTypeInfo
[ERROR] Errors in 'com/myapp/admin/rest/UserAdminRestService.java'
[ERROR] Line 53: Failed to resolve 'com.myapp.admin.rest.UserAdminRestService' via deferred binding
[WARN] For the following type(s), generated source was never committed (did you forget to call commit()?)
[WARN] com.myapp.admin.rest.UserAdminRestService_Generated_RestServiceProxy_
[WARN] com.google.gwt.http.client.Response_Generated_JsonEncoderDecoder_
所以我不知道該怎麼做。我需要爲我的服務提供JsonTypeInfo,但是對於什麼?或者,我是否需要製作我的GWTUser摘要並添加JsonTypeInfo。謝謝你的幫助。
關於你的代碼的一些註釋:當你使用@Path註解時,你不需要'setResource'。如果您在設置路徑的第一部分時遇到問題,您可以使用'Defaults.setServiceRoot(baseUrl)',其中baseUrl可以是'GWT.getHostPageBaseURL()'或'GWT.getModuleBaseURL()'。 我也不會爲了可讀性的原因在接口內實例化客戶端。你爲什麼使用JsonEncoderDecoder?你爲什麼不用一個簡單的Pojo與getter和setter?在這裏你讓你的User對象依賴於GWT庫。 –
我正在嘗試像文檔中那樣執行解碼/編碼http://restygwt.fusesource.org/documentation/restygwt-user-guide.html – vicR
如果你想要一個簡單的例子,你可以看看這裏http:///ronanquillevere.github.io/2014/03/16/gwt-rest-app.html –