Один из моих @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");
}
Но, опять же, мне придется сделать такой же обходной путь и в нескольких других местах.
Настройка параметров нумерации страниц, как показано здесь также не вариант, так как это может привести к путанице между подсистемами.
Есть ли опция конфигурации, чтобы отфильтровывать эти параметры запроса из запроса при непосредственном введении его в Map<String, String> params
?