如何使用 ”?”没有得到路径休息?

时间:2019-08-08 14:50:19

标签: java json jersey jax-rs path-parameter

我正在用Java,netbeans开发一个rest服务器。 我有我的GET请求:

// myip / application / v1 / cardapio / id = 1

Array

它正常工作。

但是我想做不同的事情,就像在其他示例中看到的那样,我想用“?”标记变量的开头。

例如:// 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,找不到页面。

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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

将正常工作。

答案 2 :(得分:0)

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