我正在用Java,netbeans开发一个rest服务器。
我有我的GET请求:
// myip / application / v1 / cardapio / id = 1
@Stateless
@Path("v1/cardapio")
public class CardapioResource {
@GET
@Produces("application/json")
@Path("id={id}")
public String getCardapio(@PathParam("id") int id) {
JsonArray array = (JsonArray) gson.toJsonTree(ejb.findById(id));
JsonObject obj = new JsonObject();
obj.add("dados", array);
return obj.toString();
}
}
它可以正常工作。
但是我想做不同的事情,就像在其他示例中看到的那样,我想用“?”标记变量的开头。
例如:// myip / application / v1 / cardapio /?id = 1
@Stateless
@Path("v1/cardapio")
public class CardapioResource {
@GET
@Produces("application/json")
@Path("?id={id}")
public String getCardapio(@PathParam("id") int id) {
JsonArray array = (JsonArray) gson.toJsonTree(ejb.findById(id));
JsonObject obj = new JsonObject();
obj.add("dados", array);
return obj.toString();
}
}
因此出现错误404,找不到页面。
最佳答案
您在“其他示例”中看到的只是URL查询部分的正常用法。只需将其与@Queryparam
一起使用
@Stateless
@Path("v1/cardapio")
public class CardapioResource {
@GET
@Produces("application/json")
@Path("/") // can be removed actually
public String getCardapio(@QueryParam("id") int id) {
JsonArray array = (JsonArray) gson.toJsonTree(ejb.findById(id));
JsonObject obj = new JsonObject();
obj.add("dados", array);
return obj.toString();
}
}
在这里,您将
getCardapio
映射到v1/cardapio/
,您将尝试从查询字符串中获取id
,因此Ex: //myip/application/v1/cardapio/?id=1
会工作。