2

私の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 サービスは次の URL を呼び出します。 http://localhost:8080/restgwt/restgwt/test

また、RestyGWT に変更を指示する方法がわかりませんurl。助けてください。

web.xml最も簡単な解決策は、ファイルサーブレット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();
    }
}
4

1 に答える 1

3

公式ドキュメントを参照する:

サービス ルート URL の構成 サービス ルート URL を構成する方法は 2 つあります。これには、最終的なサービス URL を構築するときに @Path 注釈プロパティが追加されます。単一のサービス ルート URL の場合、Defaults.setServiceRoot(String) メソッドを使用できます。異なるサービス ルートを持つ複数のサービスが使用される場合、@Options アノテーションには、静的 ServiceRoots.add(String, String) メソッドで提供されるサービス ルート エントリを読み取るように設定できる serviceRootKey プロパティが装備されています。

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

したがって、RestyGWT の REST パスはhttp://domain-name/myGwtAppModuleName/rest/furtherPath になります。ここで、さらにパスは javax.ws.rs @Path(..) の値です。Putting the line directly in GIN ClientModule failed withjava.lang.UnsatisfiedLinkError: com.google.gwt.core.client.impl.Impl.getModuleBaseURL()Ljava/lang/String エラーを回避するには、この I'それをまとめた

    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());
    }
    }
于 2015-12-30T13:37:18.133 に答える