所有带@PathParam的球衣路线均返回404

时间:2016-08-06 18:47:28

标签: java rest jersey grizzly

我使用泽西有几个 RESTful 服务,在 Grizzly 上运行。 @PathParam的所有路由都返回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
}

如果删除路径参数,它就会开始工作。但我需要路径参数。

Grizzly代码:

        ResourceConfig resourceConfig = new ResourceConfig();
        resourceConfig.register(TestController.class);

        HttpServer server = GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URL), resourceConfig, false);
        server.start();

1 个答案:

答案 0 :(得分:1)

经过大量调查,我找到了解决办法。我在这里添加它,因为有人可能从中受益。

<强>问题

我发现,在接口方法上添加POST和Path会导致问题。当方法参数中存在@PathParam时会发生这种情况。

有问题的: 接口:

@POST
@Path("/test/{id}")
public String testPost(@PathParam("id") String id);

类(基础资源在类级别Path注释上):

@Override
public String testPost(@PathParam("id") String id){
    return "hello" + id;
}

<强>解决方案

类别:

@POST
@Path("/test/{id}")
@Override
public String testPost(@PathParam("id") String id){
    return "hello" + id;
}

我是否在接口上添加POST和Path无关紧要。但必须将这些添加到实施方法中。至少这对我有用,我不知道为什么界面中的注释不起作用。正如J2EE规范所说:

  

块引用   为了与其他Java EE规范保持一致,建议始终重复注释,而不是依赖注释继承。

所以,我在类中添加了注释。