所有带有@PathParam returns 404 的球衣路线
All jersey routes with @PathParam returns 404
我有几个 RESTful 服务使用 Jersey, 运行 on Grizzly。所有带有 @PathParam
returns 404
错误代码的路由。谁能指导一下去哪里看?
工作:
@GET
@Path("/testget")
@Produces(MediaType.APPLICATION_JSON)
Response testGet(){
//working
}
不工作:
@GET
@Path("/testpath/{id}")
@Produces(MediaType.APPLICATION_JSON)
Response testPath(@PathParam("id") String id){
//not working, return 404
}
如果我删除路径参数,它就会开始工作。但我需要路径参数。
灰熊代码:
ResourceConfig resourceConfig = new ResourceConfig();
resourceConfig.register(TestController.class);
HttpServer server = GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URL), resourceConfig, false);
server.start();
经过大量调查,我找到了解决方案。我在这里添加它,因为有人可能会从中受益。
问题
我发现,在接口方法上添加 POST 和路径会导致问题。当方法参数中有 @PathParam 时会发生这种情况。
有问题:
接口:
@POST
@Path("/test/{id}")
public String testPost(@PathParam("id") String id);
Class(基础资源在class级路径注释):
@Override
public String testPost(@PathParam("id") String id){
return "hello" + id;
}
解决方案
Class:
@POST
@Path("/test/{id}")
@Override
public String testPost(@PathParam("id") String id){
return "hello" + id;
}
我在界面上加不加POST和Path都无所谓。但是那些必须添加到实现方法中。至少这对我有用,我不知道为什么界面中的注释不起作用。正如 J2EE 规范所说:
Blockquote
For consistency with other Java EE specifications, it is recommended to always repeat annotations instead of relying on annotation inheritance.
所以,我在 classes 中添加注释。
我有几个 RESTful 服务使用 Jersey, 运行 on Grizzly。所有带有 @PathParam
returns 404
错误代码的路由。谁能指导一下去哪里看?
工作:
@GET
@Path("/testget")
@Produces(MediaType.APPLICATION_JSON)
Response testGet(){
//working
}
不工作:
@GET
@Path("/testpath/{id}")
@Produces(MediaType.APPLICATION_JSON)
Response testPath(@PathParam("id") String id){
//not working, return 404
}
如果我删除路径参数,它就会开始工作。但我需要路径参数。
灰熊代码:
ResourceConfig resourceConfig = new ResourceConfig();
resourceConfig.register(TestController.class);
HttpServer server = GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URL), resourceConfig, false);
server.start();
经过大量调查,我找到了解决方案。我在这里添加它,因为有人可能会从中受益。
问题
我发现,在接口方法上添加 POST 和路径会导致问题。当方法参数中有 @PathParam 时会发生这种情况。
有问题: 接口:
@POST
@Path("/test/{id}")
public String testPost(@PathParam("id") String id);
Class(基础资源在class级路径注释):
@Override
public String testPost(@PathParam("id") String id){
return "hello" + id;
}
解决方案
Class:
@POST
@Path("/test/{id}")
@Override
public String testPost(@PathParam("id") String id){
return "hello" + id;
}
我在界面上加不加POST和Path都无所谓。但是那些必须添加到实现方法中。至少这对我有用,我不知道为什么界面中的注释不起作用。正如 J2EE 规范所说:
Blockquote For consistency with other Java EE specifications, it is recommended to always repeat annotations instead of relying on annotation inheritance.
所以,我在 classes 中添加注释。