Отфильтруйте параметры запроса, связанные с нумерацией страниц, из @RequestParam Map - PullRequest
0 голосов
/ 28 февраля 2019

Один из моих @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?

...