4

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

沙盒网站

获取:../MyProject/沙盒/数据

常规站点

获取:../MyProject/数据

我想去哪里使用正则表达式连接到我的项目根类的路径。

@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

尝试使用:

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

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

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

和您的数据资源:

@Path("/data")
于 2012-09-21T13:27:48.623 回答
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 回答