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