JAX-RS 处理具有相同路径的多个请求

Posted

技术标签:

【中文标题】JAX-RS 处理具有相同路径的多个请求【英文标题】:JAX-RS handling multiple request with same path 【发布时间】: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 你的策略效果很好,如果你有,你能引用你在哪里找到的吗? (如果我找到我的作业的报价会更好,这是一个大学项目)。 【参考方案1】:

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

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

【讨论】:

谢谢,你真的帮了我。

以上是关于JAX-RS 处理具有相同路径的多个请求的主要内容,如果未能解决你的问题,请参考以下文章

Jersey具有相同路径的多个POST方法

Spring MVC 具有相同路径的两个端点导致 OPTIONS 请求不是 COSR 安全的

创建具有相同名称但不同数据路径的多个临时表

Drupal Views 如何在具有相同路径的多个显示器之间做出决定

有效负载包含两个或多个具有相同目标路径“System.Diagnostics.Tools.dll”的文件

Apache2-需要多个具有相同域的项目在域名后使用不同的路径