【问题标题】:How to make multiple @Path in a @GET in JAX-RS API?如何在 JAX-RS API 的 @GET 中创建多个 @Path?
【发布时间】:2021-09-29 00:54:21
【问题描述】:

所以,在我的资源类中,我有以下内容:

@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Carta> get() {
    return repositorio.getAll();
}

@GET
@Path("{id}")
@Produces(MediaType.APPLICATION_JSON)
public Carta getById(@PathParam("id") int id) {
    return repositorio.getID(id);
}

两者都有效,一个是通用获取(将获取所有),另一个是通过 ID 获取。我需要通过 String 添加第三个 get,但 @params 失败了。我需要将此添加到 Resource 类中:

@GET
@Path("{nome}")
@Produces(MediaType.APPLICATION_JSON)
public List<Carta> getNome(@PathParam("nome") String nome) {
    return repositorio.getString(nome);
}

如果我评论 getById 行,我的 getByString 工作,代码很好,我只需要同时使两个函数,如果它收到一个数字,它会查找一个 ID,如果它是一个字符串它会查找名称和描述。另外,我想知道创建更多端点是否是更好的代码实践?像 /search/byid/xx 和 /search/byname/xxx 而不是一般的 /search/xxx?谢谢。

【问题讨论】:

  • 您可以使用正则表达式来区分整数和字符串路径参数。类似于 @Path("{id : \\d+}") 的整数。您可以阅读有关 JAX-RS link 的 URI 优先级的更多信息

标签: java api jax-rs


【解决方案1】:

您应该增强List&lt;Carta&gt; get() 以支持按卡名过滤,而不是创建不同的端点。

这样做的预期方法是像这样使用@QueryParam 注释:

@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Carta> get(@QueryParam("name") String name) {
    return repositorio.getCartas(name);
}

null name 参数的情况下,将返回所有Carta 实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2023-03-16
    • 2019-05-26
    相关资源
    最近更新 更多