2014-03-25 3 views
0

Rest Rest Service를 통해 데이터를 가져 오려고합니다. 그 때문에 나는 봄용 컨트롤러와 휴식 서비스를 제공합니다.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를 사용하고 있습니까? 왜 당신은 getters와 세터와 함께 간단한 Pojo를 사용하지 않습니까? 여기에서 User 객체를 GWT 라이브러리에 의존하게 만듭니다. –

+0

내가 deoding/인코딩을 시도하고있다. http://restygwt.fuseource.org/documentation/restygwt-user-guide.html – vicR

+0

간단한 예제가 필요하다면 여기 http : /ronanquillevere.github.io/2014/03/16/gwt-rest-app.html –

답변

2

잘 모르겠지만 GWTUser가 RestyGWT가 다시 사용할 수없는 인터페이스를 가지고 있다는 사실과 관련이있을 수 있습니다.

JsonEncoderDecoder를 User 클래스 외부로 옮겨보십시오.

+0

그래도 같은 패키지에 있니? – vicR

+0

내 문제가 해결되었습니다. 예, JsonEncoderDecoder가 필요하지 않았습니다. 모든 것이 restygwt에 의해 완료되었습니다. – vicR