gpt4 book ai didi

java - 与 Jersey 的意外 REST 映射

转载 作者:太空宇宙 更新时间:2023-11-04 11:18:03 25 4
gpt4 key购买 nike

在下面的测试用例 #3 中,我采用了意想不到的方法。有更好的映射策略吗?

@Path("/pets")


@GET
@Path("/{petId}")
public Response getPet(@PathParam("petId") String petId){
//fetch a single pet record
}

@GET
@Path("/owner/{ownerId}") //fetch collection of pet records for an owner
public Response getPetListByOwner(@PathParam("ownerId") String ownerId){
//fetch a list of pet records by ownerId
//Validate ownerId not null...
}

测试用例#1

/宠物/123
//正确调用getPet("123")

测试用例#2

/pets/owner/456
//正确调用getPetListByOwner("456")

测试用例#3

/宠物/主人
//意外调用 getPet()。 Jersey 使用“owner”作为 getPet() 的 petId,并调用 getPet(“owner”)。我希望代码调用 getPetListByOwner() ,在那里我可以进行空检查并返回需要ownerId的响应,但我登陆了错误的方法(getPet())。虽然我实际上不希望人们点击此 URL,但我无法阻止他们。我也不希望搜索使用 petId="owner"执行的宠物。

有更好的映射策略吗?

最佳答案

定义另一个显式映射到路径 /owner 的端点方法(没有额外的路径参数)并从那里返回错误响应。

@GET
@Path("/owner")
public Response getPetListByOwner() {
return Response
.status(Response.Status.BAD_REQUEST)
.build();
}

或者,您可以仅使用一个端点方法和一些与路径模板匹配的正则表达式来实现它,以声明 /owner 之后的部分是可选的。 Java EE6教程包含有关在 @PathParam 模板中使用正则表达式的信息。

我更喜欢显式声明额外端点方法的可读性,但这有点主观。

关于java - 与 Jersey 的意外 REST 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45243704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com