我使用泽西有几个 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();
答案 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规范保持一致,建议始终重复注释,而不是依赖注释继承。
所以,我在类中添加了注释。