所有带有@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 中添加注释。