3

アプリケーション (URL: /rest/*) には既存の Jersey REST サービスがあります。サンプル URL は次のようになります。http://xxx:8080/app/rest/company/getdata

プロパティに基づいて、REST 呼び出しを別のコンテキスト (URL: /newrest/*) にリダイレクトする必要があります。サンプル URL は次のようになります。http://xxx:8080/app/newrest/company/getdata

そこで、web.xml にサーブレット マッピングを追加しました。

したがって、私の web.xml は以下のスニペットのようになります。

<servlet>
    <servlet-name>ServletAdaptor</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>xxx.httpservice</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>ServletAdaptor</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>  
<filter>
    <filter-name>secureRESTFilter</filter-name>
    <filter-class>xxx.RESTSecurityFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>secureRESTFilter</filter-name>
    <url-pattern>/rest/*</url-pattern>
</filter-mapping>

<servlet>
    <servlet-name>NewAdaptor</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>xxx.newhttpservice</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>NewAdaptor</servlet-name>
    <url-pattern>/newrest/*</url-pattern>
</servlet-mapping>

ServletAdaptor サーブレットのプロパティをチェックするためのフィルターを作成しました。必要に応じて NewAdaptor サーブレットにリダイレクトする必要があります。必要(プロパティに基づく)。

この問題を解決するための指示が必要です。助けてください。

私のフィルター クラスの dofilter メソッドは次のようになります。

@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException {     
    HttpServletRequest request = (HttpServletRequest) req;    
    String productMode = "b";//hardcoded for this example    
    String url = request.getRequestURL().toString();
    if(productMode.equals("a")){
        chain.doFilter(req, res);
    }else{
        url=url.replace("rest", "newrest");
        req.getRequestDispatcher(url).forward(req, res);
    }

}

しかし、RequestDispatcher はリクエストを新しい URL に転送していないようです。

4

1 に答える 1

1

私が理解していることから、あなたは新しいサービスを作成したり、新しいサービスを統合しようとしています。将来的に下位互換性をサポートするために、URL をバージョン化できることが理想的です。 company/getdata など

新しい API 呼び出しを既存の API 呼び出しにラップしてみませんか? コンシューマーが API と対話できるように、内部的に新しい API を呼び出して、その応答を消費します。次に、新しいオブジェクトを返すか、オブジェクトをラップします。

採用しようとしている戦略を本当に再検討する必要があります。

于 2013-05-14T06:32:30.417 に答える