gpt4 book ai didi

java - 使用不同的 QueryParams 重载 REST 端点

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:06:38 28 4
gpt4 key购买 nike

我正在尝试确定与变量为 Collection<String> 的 Jersey 客户端端点交互的最佳方式.我不是 100% 确定这样做是正确的,但我想知道这是否可能/实现此目标的正确方法是什么 - 也许是 @POST有消息正文?

DAO中的方法是Set<Foo> retrieveByKeys(Collection<String> keys) .因此,我试图找出为此创建端点的最佳方法。第一个想法是:

@POST
@Path('/foos')
@Consumes(MediaType.APPLICATAION_JSON)
@Produces(MediaType.APPLICATAION_JSON)
Response retrieveByKeys(Collection<String> keys) {
... //do things
}

或者:

@GET
@Path('/foos')
Response retrieveByKeys(@QueryParam('keys') Collection<String> keys) {
... //do things
}

我不太确定你可以做第二个,但有人建议将其作为一种可能的解决方案。

这两种方式都很好,但同时我的 DAO 中还有另一种方法那是 List<Foo> retrievePageStartingFrom(String startKey, int pageSize) .我知道最好的休息做法是尽可能重复使用 url,这就是我试图对这两个做的事情。我只是在努力寻找一种方法来区分这两种方法但保持相同的 url。

我想知道是否可以用其他 @QueryParams 使端点过载但这次像:

@GET
@Path('/foos')
Response retrievePageStartingFrom(@QueryParam('startKey') String startKey, @QueryParam('pageSize') int pageSize) {
... //do things
}

而且 Jersey Client 会知道区分这两个调用,因为第一个方法有一个参数,第二个方法有两个参数,这两个参数也是不同的类型。

我想我想我正在尝试做的最好的方式就像在 java 中一样,当您可以拥有一个具有特定参数的构造函数,以及另一个具有不同/不同类型参数但具有相同方法名称(显然)的构造函数时。

无论正确答案是什么,如果可能,我都会尝试为这两种方法保留相同的 URL,我想知道实现该目标的最佳方法是什么!谢谢。

最佳答案

不,如果所有端点方法都使用相同的 HTTP 方法(例如,都使用 @Get Annotation)但查询参数不同,则不可能重载端点方法。 Rest 资源由 URI 而非参数唯一标识。

您需要做的是检查是否存在不同的查询参数并调用所需的实现:

@GET
@Path('/foos')
Response retrieveByKeys(@QueryParam('keys') Collection<String> keys, @QueryParam('startKey') String startKey, @QueryParam('pageSize') int pageSize) {
List<FooRes> fooResources;
//check if keys Collection is empty
if(keys==null||keys.isEmpty()){
if(startKey==null || startKey.isEmpty()){
return Response.status(Status.BAD_REQUEST).build();
}else{
if(pageSize==null||pageSize.isEmpty()){
//set default pageSize
pageSize=10;

//call your DAO or Repository or Service methods
fooResources=foosRepo.partialResults(startKey,pageSize);
....

}
}else{
fooResources=foosRepo.findByKeys(keys);
}
}

return Response.ok().entity(fooResources).build();
}

这是一个原始的想法,你可以让你的想法更清楚,而不是使用 if..else.. 的嵌套网络

关于java - 使用不同的 QueryParams 重载 REST 端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38774494/

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