2014-03-25 88 views
0

我試圖通過我的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。謝謝你的幫助。

+0

關於你的代碼的一些註釋:當你使用@Path註解時,你不需要'setResource'。如果您在設置路徑的第一部分時遇到問題,您可以使用'Defaults.setServiceRoot(baseUrl)',其中baseUrl可以是'GWT.getHostPageBaseURL()'或'GWT.getModuleBaseURL()'。 我也不會爲了可讀性的原因在接口內實例化客戶端。你爲什麼使用JsonEncoderDecoder?你爲什麼不用一個簡單的Pojo與getter和setter?在這裏你讓你的User對象依賴於GWT庫。 –

+0

我正在嘗試像文檔中那樣執行解碼/編碼http://restygwt.fusesource.org/documentation/restygwt-user-guide.html – vicR

+0

如果你想要一個簡單的例子,你可以看看這裏http:///ronanquillevere.github.io/2014/03/16/gwt-rest-app.html –

回答

2

不確定,但可能與您的GWTUser具有RestyGWT無法解析的接口有關。

嘗試移出您的用戶類以外的JsonEncoderDecoder。

+0

好的,但在同一個包,你的意思是? – vicR

+0

解決了我的問題。是的JsonEncoderDecoder是沒有必要的,一切都是由restygwt :) thx完成你的幫助。 – vicR

相關問題