0

我正在用java开发一个rest服务器,netbeans。我有我的 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,找不到页面。

4

3 回答 3

1

你不能,之后?签署它的查询参数而不是路径参数

您可以使用@QueryParam("id")

于 2019-08-08T14:53:34.250 回答
1

您在“其他示例”中看到的只是 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

会工作的。

于 2019-08-08T14:57:17.563 回答
0

你也可以使用 @RequestParam("id") int id

于 2019-08-08T15:46:44.817 回答