4

システムにサンドボックス環境を実装したいJersey @Pathに問題があります。基本的に、次のように指定された URL でサンドボックス モードを無効または有効にします。

サンドボックス サイト

取得: ../MyProject/sandbox/data

正規サイト

GET: ../マイプロジェクト/データ

プロジェクトのルート クラスに接続されたパスに正規表現を使用する方法を考えました。

@Path("/{mode:sandbox|}")
public class JerseyResource{

    boolean isSandbox = false;

    public JerseyResource(@PathParam("mode") String mode) {
        if(mode.equals("sandbox"))
            isSandbox = true;
    }

    @GET
    @Path("data")
    @Produces(MediaType.TEXT_PLAIN)
    public Response data() {
        if(isSandbox) 
            return Response.ok("Sandbox is on").build();
        return Response.ok("Sandbox is off").build();
    }
}

「GET: ../MyProject/sandbox/data」を試すと問題なく動作し、「Sandbox is on」が返されます。しかし、「GET: ../MyProject/data」を実行すると、見つからない 404 ページが返されます。

固定文字列を取得すると同時に、Jersey の引数としてパス url に空の文字列を使用する方法はありますか?

4

2 に答える 2

0

web.xml ファイルを編集して解決策を見つけました。

<servlet-mapping>
    <servlet-name>myProject</servlet-name>
    <url-pattern>/sandbox/*</url-pattern>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

これにより、同じプロジェクトを指す複数の URL を持つことができ、コードに次のように記述できます。

@Path("")
public class JerseyResource{

    boolean isSandbox = false;

    public JerseyResource(@Context HttpServletRequest req) {
        if(req.getRequestURI().startsWith("/nexus/sandbox"))
            isSandbox = true;
    }

これは私にとって完璧に機能しており、空のクラスパスを持つことができ、サブパスも許可されます。

于 2012-09-21T14:06:19.223 に答える
0

使用してみてください:

@Path("{mode:(/sandbox)?}")

また、モード比較を次のように変更する必要があります。

if (mode.endsWith("sandbox"))
    isSandbox = true;

およびデータ リソースを次のようにします。

@Path("/data")
于 2012-09-21T13:27:48.623 に答える