【发布时间】: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