RestyGWT-用于弹簧休息服务的自定义URL映射

时间:2015-12-23 08:03:00

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

我有问题,我的Spring Rest Controllers是以RestyGWT想要的方式映射的。 我的申请是:http://localhost:8080/restgwt/

根据web.xml:

<servlet>
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/classes/action-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
    <url-pattern>/service/*</url-pattern>
</servlet-mapping>

我的Spring服务/控制器听取: http://localhost:8080/restgwt/service/test

但我的RestyGWT服务调用此网址: http://localhost:8080/restgwt/restgwt/test

而且我不知道如何告诉RestyGWT改变url。请帮忙。

我知道最简单的解决方案是更改web.xml文件servlet url-pattern参数

来自:<url-pattern>/service/*</url-pattern>

至:<url-pattern>/restgwt/*</url-pattern>

但我想让RestyGWT改变它的行为。

此处粘贴一些其他代码:

GWT方面的TestService

package pl.korbeldaniel.restgwt.client;

import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;

import org.fusesource.restygwt.client.MethodCallback;
import org.fusesource.restygwt.client.RestService;

public interface TestService extends RestService {
    @GET
    @Path("test")
    public void getInfo(MethodCallback<TestPojo> test);
}

Spring侧的TestService

package pl.korbeldaniel.restgwt.server;

import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

@RestController()
public class TestService {
    @RequestMapping(value = "test", method = RequestMethod.GET)
    public @ResponseBody TestEntity getInfo() {
        TestEntity test = new TestEntity();
        System.out.println("Hit server for getting _1");
        return new TestEntity();
    }
}

1 个答案:

答案 0 :(得分:2)

Reffering to the official documentation:

  

配置服务根URL   在构建最终服务URL时,有两种方法可以配置服务根URL,这些URL附加了@Path注释属性。对于单个服务根URL,可以使用Defaults.setServiceRoot(String)方法。当使用具有不同服务根的多个服务时,@ Options注释配备了serviceRootKey属性,该属性可以设置为读取随静态ServiceRoots.add(String,String)方法提供的服务根条目。

Defaults.setServiceRoot(new Resource( GWT.getModuleBaseURL()).resolve("../rest").getUri());

所以RestyGWT的REST路径变为http://domain-name/myGwtAppModuleName/rest/furtherPath 其中furtherPath是javax.ws.rs @Path(..)value 将该行直接放入GIN ClientModule失败,java.lang.UnsatisfiedLinkError: com.google.gwt.core.client.impl.Impl.getModuleBaseURL()Ljava/lang/String 为避免错误,我把它包起来

    public class ClientModule extends AbstractPresenterModule {
        @Override
        protected void configure(){
           //your installs and binds here
           bind(RestyGwtConfig.class).asEagerSingleton();
        }
    }

    public class RestyGwtConfig {
    static {
    Defaults
.setServiceRoot(new Resource( GWT.getModuleBaseURL()).resolve("../rest").getUri());
    }
    }