【问题标题】:How to use "?" no get Path Rest?如何使用 ”?”没有获得路径休息?
【发布时间】:2019-12-16 07:53:10
【问题描述】:

我正在用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,找不到页面。

【问题讨论】:

  • 但我想做不同的事情,正如我在其他示例中看到的那样,我想标记变量的开头您刚刚看到查询参数的正常用法。它不是控制器路由的一部分。恕我直言@Path("id={id}") 不是你想要的。你只是想映射到/ 并得到@QueryParam
  • @Antoniossss 但是有办法做到这一点,我见过几个案例。我只是相信我走错了路。
  • 是的,您正试图滥用 url 构造。您希望(无论出于何种原因)查询字符串成为路径的一部分。

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


【解决方案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

会起作用的。

【讨论】:

  • 还有一件事......你如何获得两个参数?例如://myip/application/v1/cardapio/?id=1&key=2
  • 同理。 2x 查询参数
【解决方案2】:

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

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

【讨论】:

  • 我不太明白。是两种类型的参数吗?我不知道这些签名参数在哪里。
  • @JúlioCésarBindandi 使用而不是 @PathParam("id")
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多