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 处理具有相同路径的多个请求的主要内容,如果未能解决你的问题,请参考以下文章
Spring MVC 具有相同路径的两个端点导致 OPTIONS 请求不是 COSR 安全的
Drupal Views 如何在具有相同路径的多个显示器之间做出决定