泽西岛的路径匹配“沙盒”或空字符串

时间:2012-09-21 12:58:16

标签: java regex path jersey jax-rs

我遇到了Jersey @Path的问题,我希望为我的系统实现一个沙箱环​​境。基本上通过给定的URL禁用或启用沙箱模式,如下所示:

沙盒网站

  

GET:../ MyProject / sandbox / data

常规网站

  

GET:../ MyProject / data

我可以使用连接到项目根类的Path的正则表达式。

@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页面。

这里是否有办法在路径网址中使用空字符串作为泽西的参数,同时采用固定字符串?

2 个答案:

答案 0 :(得分:0)

尝试使用:

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

您还需要将模式比较更改为:

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

和您的数据资源:

@Path("/data")

答案 1 :(得分: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;
    }

这对我来说非常合适,它允许有一个空类Path,也允许子路径。