【问题标题】:RestyGWT and Spring. How to manage Entities and models on Client. Error: java.lang.NoClassDefFoundError: com/google/gwt/core/client/GWTBridgeRestyGWT 和 Spring。如何管理客户端上的实体和模型。错误:java.lang.NoClassDefFoundError:com/google/gwt/core/client/GWTBridge
【发布时间】:2015-12-11 07:07:58
【问题描述】:

我正在尝试使用RestyGwt 将我的GWT 应用程序的backend 切换到Spring。 我遵循了这个例子:

  1. ekito
  2. dzone

现在我想知道如何处理Entities。它们可以在客户端使用吗?我已将它们放入 Shared 包中,但不幸的是我收到了一个错误:

gru 09, 2015 11:06:08 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [Spring MVC Dispatcher Servlet] in context with path [/restgwt] threw exception [Handler processing failed; nested exception is java.lang.NoClassDefFoundError: com/google/gwt/core/client/GWTBridge] with root cause
java.lang.ClassNotFoundException: com.google.gwt.core.client.GWTBridge
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)
    at com.sagar.restgwt.shared.OrderConfirmation.toString(OrderConfirmation.java:18)
    at java.lang.String.valueOf(String.java:2994)
    at java.lang.StringBuilder.append(StringBuilder.java:131)

这是我的课程:

客户端

@Path("/service")
public interface InfoService extends RestService {
    public static class Util {
        private static InfoService instance;

        public static InfoService getService() {
            if (instance == null) {
                instance = GWT.create(InfoService.class);
            }
            Resource resource = new Resource(GWT.getModuleBaseURL() + "service");
            ((RestServiceProxy) instance).setResource(resource);
            return instance;
        }
    }

    @GET
    @Path("/loadInfo")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public void getInfo(MethodCallback<OrderConfirmation> callback);
}
public void onModuleLoad() {

    Button button = new Button("Click Me");
    button.addClickHandler(new ClickHandler() {
        @Override
        public void onClick(ClickEvent event) {
            InfoService.Util.getService().getInfo(
                    new MethodCallback<OrderConfirmation>() {
                        @Override
                        public void onSuccess(org.fusesource.restygwt.client.Method method, OrderConfirmation response) {
                            RootPanel.get().add(
                                    new Label(
                                            "message: " + response.message + "  - ready time: " + response.ready_time)
                                    );
                        }
                        @Override
                        public void onFailure(org.fusesource.restygwt.client.Method method,
                                Throwable exception) {
                            // TODO Auto-generated method stub
                            GWT.log("Error");

                        }

                    });
        }
    });

服务器端

@Controller
public class RestGWTController {
    @RequestMapping(value = "/loadInfo", method = RequestMethod.GET, headers = "Accept=application/json")
    public @ResponseBody OrderConfirmation handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //GreetingServiceEndpoint endpoint = greetingService.getGreetingServiceEndpointPort();

        OrderConfirmation confirmation = new OrderConfirmation();
        //confirmation.message = endpoint.sayHello();
        confirmation.message = "Hello";
        confirmation.ready_time = System.currentTimeMillis() + 1000 * 60 * 30;
        System.out.println("hit server");
        return confirmation;
    }
}

共享模块

public class OrderConfirmation {
    public String message;
    public Long ready_time;
    /**
     * Example of how to create an instance of a JsonEncoderDecoder for a data
     * transfer object.
     */
    public interface OrderConfirmationJED extends JsonEncoderDecoder<OrderConfirmation> {
    }
    @Override
    public String toString() {
        if (GWT.isClient()) {
            OrderConfirmationJED jed = GWT.create(OrderConfirmationJED.class);
            return jed.encode(this).toString();
        }
        return super.toString();
    }
}

现在我想到了shared 模块上的DTO 和服务器上的Entity。我这个是对的。 我的问题是:

  1. 什么是用于此目的的好的设计模式。
  2. 服务器端Entity能否序列化为json,在客户端作为gwt中的Java对象使用?

请给我一些帮助。

【问题讨论】:

    标签: spring rest spring-mvc gwt resty-gwt


    【解决方案1】:

    您缺少 gwt-servlet.jar 依赖项。

    Maven 配置

    它必须是&lt;scope&gt;compile&lt;/scope&gt;,这是默认值。其他 gwt-jars 可以是&lt;scope&gt;provided&lt;/scope&gt;

                <dependency>
                        <groupId>com.google.gwt</groupId>
                        <artifactId>gwt-servlet</artifactId>
                        <version>${gwt.version}</version>
                </dependency>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-23
      • 1970-01-01
      • 1970-01-01
      • 2013-01-15
      • 2020-08-05
      • 2014-11-05
      相关资源
      最近更新 更多