PagingAndSortingRepository как сортировать без учета регистра?

Моя проблема в том, что мой код сортирует результат с учетом регистра.

Ниже вы видите мой код:

    @GetMapping("/user/api_key_list")
    public ModelAndView apiKeyList(Model model,
                                   @RequestParam("pageSize") Optional<Integer> pageSize,
                                   @RequestParam("page") Optional<Integer> page,
                                   @RequestParam("sortBy") Optional<String> sortBy
    ) {
        ModelAndView modelAndView = new ModelAndView("user/apikeylist");
        int evalPageSize = pageSize.orElse(INITIAL_PAGE_SIZE);
        int evalPage = (page.orElse(0) < 1) ? INITIAL_PAGE : page.get() - 1;
        String sortOrder = sortBy.orElse(INITIAL_SORT);
        String[] sort = sortOrder.split(",");
        String evalSort = sort[0];
        String sortDirection = sort[1];
        Sort.Direction evalDirection = replaceOrderStringThroughDirection(sortDirection);
        Page<ApiKey> apiKeyList = apiKeyRepository.findAll(PageRequest.of(evalPage, evalPageSize, evalDirection, evalSort));
        PagerModel pager = new PagerModel(apiKeyList.getTotalPages(), apiKeyList.getNumber(), BUTTONS_TO_SHOW);
        modelAndView.addObject("apiKeyList", apiKeyList);
        modelAndView.addObject("selectedPageSize", evalPageSize);
        modelAndView.addObject("pageSizes", PAGE_SIZES);
        modelAndView.addObject("pager", pager);
        modelAndView.addObject("selectedSort", String.format("%s,%s", evalSort, sortDirection));
        modelAndView.addObject("sorts", SORTS);
        return modelAndView;
    }

Мой вопрос: как я могу отсортировать его без учета регистра?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
1 914
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Используйте Sort.Order:

Sort.Order order = new Sort.Order(evalDirection , evalSort).ignoreCase();

Page<ApiKey> apiKeyList = apiKeyRepository.findAll(PageRequest.of(evalPage, evalPageSize, new Sort(order)));
Ответ принят как подходящий

Что ж, если вы используете spring-data-jpa, вы можете сделать это так

Sort.Order order = new Sort.Order(Sort.Direction.ASC, "columnName").ignoreCase();

и передайте этот заказ в запросе.

В твоем случае

Page<ApiKey> apiKeyList = apiKeyRepository.findAll(PageRequest.of(evalPage, evalPageSize, new Sort(order)));

Изменить 1:

Для более новой версии Spring указанный выше метод устарел.

просто добавив код, добавленный Дуллимейстером, чтобы завершить ответ

Sort sortOrderIgnoreCase = Sort.by(new Sort.Order(evalDirection,evalSort).ignoreCase());

Проблема в том, что если я использую new Sort(order), он устарел.

Dullimeister 12.06.2018 13:41

вы можете посмотреть docs.spring.io/spring-data/commons/docs/current/api/org/… для других функций сортировки, которые не являются устаревшими. просто передайте параметр соответственно

MyTwoCents 12.06.2018 13:46

Это должно исправить это

    //    Query query = new Query();
        Sort.Order order = new Sort.Order(Direction.DESC, "columnName");
   //     query.with( Sort.by(order));

        Page<ApiKey> apiKeyList = apiKeyRepository.findAll(PageRequest.of(evalPage, evalPageSize, new Sort(order)));

Добавление комментариев, чтобы это могло помочь и другим людям.

Другие вопросы по теме