【问题标题】:JAX-RS handling multiple request with same pathJAX-RS 处理具有相同路径的多个请求
【发布时间】:2022-01-21 09:39:43
【问题描述】:

我正在 JAX-RS (rest-easy) 中开发此应用程序,其中我有一个 PUT 更新路径

http://.../update/{resource_id}

你可以在其中做一些请求,比如ChangeNameRequest或ChangeStyleRequest,每个请求都是这样形成的:

public class ChangeNameRequest{
    public String newName;
}

public class ChangeStyleRequest{
    public String newStyle;
}

然后在控制器类中我有这些方法:

@Path("/update/{id}")
@PUT
@Consumes(MediaType.APPLICATION_JSON)
public Response changeName(ChangeNameRequest request, @PathParam("id") String id)

@Path("/update/{id}")
@PUT
@Consumes(MediaType.APPLICATION_JSON)
public Response changeArtworkStyle(ChangeStyleRequest request, @PathParam("id") String id) {

问题是当我发出 JSON 请求时,例如:

{
"newname" : "Name changed"
}

它不确定地在其中一种请求处理方法之间进行选择,因此会产生错误。

我该如何解决这个问题? (也许我可以添加一个 request_type 字段或其他东西,但我想知道是否有一些最佳实践或最佳修复来处理这个问题)。

【问题讨论】:

  • 为什么在两个不同的端点上有相同的路径@Path("/update/{id}")?您可能应该将其设置为 @Path("/name/update/{id}")@Path("/artworkstyle/update/{id}")
  • @Kaus2b 因为(我还是个学生)在我的想法中,我可以更新我的对象并且更新操作可以通过请求完成,这样单个 /update/ 端点就可以在此基础上接受不同的请求,做不同的事情。也许我错了,但我可以照你说的做。
  • 两个不同的方法不能有相同的路径字符串。如果您想保留相同的端点,只需删除其中一个,在另一个上您可以添加另一个 @PathParam,它可以是名称或艺术品
  • 完美,我将为每个操作创建一些不同的端点,谢谢:)
  • 嗨@Kaus2b 你的策略效果很好,如果你有,你能引用你在哪里找到的吗? (如果我找到我的作业的报价会更好,这是一个大学项目)。

标签: rest microservices jax-rs resteasy


【解决方案1】:

https://docs.oracle.com/cd/E19798-01/821-1841/6nmq2cp1v/index.html

请参阅 URI 路径示例和“提取请求参数”中的部分

【讨论】:

  • 谢谢,你真的帮了我。
猜你喜欢
  • 1970-01-01
  • 2023-02-12
  • 2011-06-14
  • 2017-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多