【问题标题】:RestyGWT Must be annotated with JsonTypeInfoRestyGWT 必须用 JsonTypeInfo 注解
【发布时间】:2014-05-03 14:05:29
【问题描述】:

我正在尝试通过我的 Restservice 获取数据。因此我有我的弹簧控制器和我的休息服务。

@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。感谢您的帮助。

【问题讨论】:

  • 代码中的一些 cmets:由于您使用的是 @Path 注释,因此您不需要 setResource。如果您在设置路径的第一部分时遇到问题,可以使用Defaults.setServiceRoot( baseUrl),其中baseUrl 可以是GWT.getHostPageBaseURL()GWT.getModuleBaseURL(),就像您已经做的那样。出于可读性原因,我也不会在接口内实例化客户端。你为什么使用 JsonEncoderDecoder ?为什么不使用带有 getter 和 setter 的简单 Pojo 呢?在这里,您使您的 User 对象依赖于 GWT lib。
  • 我正在尝试像文档restygwt.fusesource.org/documentation/restygwt-user-guide.html中那样进行解码/编码
  • 如果你想要一个简单的例子,你可以看看这里ronanquillevere.github.io/2014/03/16/gwt-rest-app.html

标签: google-app-engine rest gwt resty-gwt


【解决方案1】:

不确定,但可能与您的 GWTUser 内部有一个 RestyGWT 无法解析的接口有关。

尝试将 JsonEncoderDecoder 移出 User 类。

【讨论】:

  • 解决了我的问题。是的,JsonEncoderDecoder 不是必需的,一切都由 restygwt 完成 :) 感谢您的帮助。
猜你喜欢
  • 2015-02-20
  • 2014-06-15
  • 1970-01-01
  • 2022-08-19
  • 2018-07-12
  • 2018-04-19
  • 1970-01-01
  • 1970-01-01
  • 2012-08-01
相关资源
最近更新 更多