当超过值9时,JavaREST-Path变量会导致404

当超过值9时,JavaREST-Path变量会导致404,java,rest,Java,Rest,我极度绝望和疲惫。 我的问题如下: 我为一个我正在为学校工作的项目创建了一个休息服务。在这里,我有几个请求,它们基于Path变量与我的db交互。问题是,我不能要求超过9的东西。为了进一步说明我的意思,我复制了以下片段: @GET @Path("/Child/{Child: \\d+}") @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) public Response Child(@PathParam ("Chi

我极度绝望和疲惫。 我的问题如下: 我为一个我正在为学校工作的项目创建了一个休息服务。在这里,我有几个请求,它们基于Path变量与我的db交互。问题是,我不能要求超过9的东西。为了进一步说明我的意思,我复制了以下片段:

@GET
@Path("/Child/{Child: \\d+}")
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response Child(@PathParam ("Child")int child) throws IOException{
    DAO dao = new DAO();
    List<Child> Child;
    try{
        Child = dao.Child(child);
        ResponseBuilder rb = Response.ok();
        rb.entity(new GenericEntity<List<Child>>(Child) {});

        return rb.build();

    }catch(Exception e){
        ResponseBuilder rp = Response.status(404);
        return rp.build();
    }

}
@GET
@路径(“/Child/{Child:\\d+}”)
@产生({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})
公共响应子级(@PathParam(“Child”)int-Child)引发IOException{
DAO=新DAO();
列出儿童;
试一试{
Child=dao.Child(Child);
ResponseBuilder rb=Response.ok();
rb.实体(新的一般实体(子实体){});
返回rb.build();
}捕获(例外e){
ResponseBuilder rp=响应状态(404);
返回rp.build();
}
}

它返回404代码,而不是返回带有匹配索引的子对象(该索引存在,我已经检查了多次,以查看是否真的忽略了显而易见的内容)。它甚至似乎没有捕获异常,因为我更改了响应代码,它仍然返回相同的结果。我还尝试过自定义变量(如上所示,使用\d+,还有各种其他表达式,但它们都不起作用)。我在网上搜索过答案,但没有一个能帮到我。如果需要更多信息,我非常乐意提供。

据我所知,您需要path变量中的任何数字,并且它也可以大于9。试试下面。此外,如果是非数字值,下面将给出404,因此您不需要在您的方法中处理它

    @GET
    @Path("/Child/{Child:[0-9]+}")
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
    public Response Child(@PathParam("Child") int child) throws IOException {
        return Response.status(200).build();
    }

你的问题在别的地方。这对我来说就像一个冠军:

@Path("/server/{server: \\d+}")
public class Restful {

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public Response getText(@PathParam("server") int pid) {
        return Response.status(200).build();
    }
}
Servlet映射:

 <servlet-mapping>
    <servlet-name>Jersey Web Application</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>

在Tomcat 8.5和jersey上

为了清楚起见,如果id超过9,则返回404。不是吗?如果删除参数中冒号后的空格,会有什么变化吗?另外,这是哪个容器和JAXRS库(假设您正在使用它?尝试用
\\d+
替换您的正则表达式
[0-9]+
,以防万一。如果try block中有任何错误,您将根据您的代码得到404。因此,请尝试打印异常堆栈跟踪,看看会发生什么。我刚刚起床,尝试了您使用的表达式,它工作了!因此感谢您的帮助:D我现在感觉很愚蠢。我想我应该早点睡觉了。
http://localhost:8080/restfulServer/rest/server/200