我的@RestController
之一看起来像这样。
@GetMapping("/summaries/")
public Page<Summary> getSummaries(
@RequestParam Map<String, String> params,
Pageable pageable) {
return summaryService.findMatchingSummaries(params, token, pageable);
}
在上面的代码段中,summaryService
应该返回所有与适当的键值对匹配的记录。而且我使用了Map
,以便API可以采用任何一组键值对来搜索数据库。
当我调用如下所示的API时,
http://localhost:8080/summaries/?attributeName1=xx&attributeName2=yyy
它会从数据库中退回前50条记录。
但是当我使用以下分页详细信息调用此API时,
http://localhost:8080/summaries/?attributeName1=xx&attributeName2=yyy&page=1&size=100
我没有得到任何结果,因为现在逻辑试图使用4个参数(包括分页参数page
和size
)进行搜索。
立即想到的是如果在地图中找到这些属性,则将其过滤掉。看起来像这样。
void clearPaginationDetails(Map<String,String> params){
params.remove("page");
params.remove("sort");
params.remove("size");
}
但同样,我也必须在其他两个地方执行相同的解决方法。
配置 here 之类的分页参数也不是一种选择,因为这会导致子系统之间的混乱。
是否有一个配置选项可以从请求中过滤掉这些查询参数,同时直接将其注入到Map<String, String> params
中?