在我的 Jersey REST 界面中,有两种方法(除其他外):
@GET
@Path("{scenarioId}/instance")
@Produces(MediaType.APPLICATION_JSON)
public Response getScenarioInstances(
@Context UriInfo uri,
@PathParam("scenarioId") int scenarioId,
@QueryParam("filter") String filterString) {
// code here
return Response.ok(result.toString(), MediaType.APPLICATION_JSON).build();
}
和
@GET
@Path("{scenarioId}/instance/{instanceId}")
@Produces(MediaType.APPLICATION_JSON)
public Response getScenarioInstance(
@Context UriInfo uri,
@PathParam("scenarioId") int scenarioId,
@PathParam("instanceId") int instanceId) {
// code here
return Response.ok(result.toString(), MediaType.APPLICATION_JSON).build();
}
通过 Postman 向/2/instance 发出 GET 请求,调用第一个方法并生成包含所有实例的 JSON 对象。
一个 GET 请求,例如但是/2/instance/2 不会调用第二个方法,并导致 404 错误。
我在第二种方法中遗漏了什么吗?
好吧,问题是,REST 接口(interface)分布在多个类中,并且另一个类具有 @Path(".../{scenarioId}/instance/{instanceId}) 注释。我将方法移到那里,然后调用它。显然这会导致冲突,即使在此类中没有直接为此路径声明 @GET 方法。
回想起来,我可能应该在问题中添加这个细节。
我是一名优秀的程序员,十分优秀!