2015-03-11 6 views
2

В настоящее время я реализую CustomRepository, который расширяет Spring PagingAndSortingRepository, потому что в этом репозитории мне нужна функция сортировки String name.Spring pagingAndSortingRopository порядок сортировки

Все работы по желанию у меня есть генерируемый хранилище отдыха под: http://localhost:8080/app/customrepository{?page,size,sort}

Когда я хочу, чтобы отсортировать его по URL например .: http://localhost:8080/app/customrepository?sort=name,asc это становится отсортирован, но в случае чувствительный заказ. Проблема в том, что мне нужна случайная сортировка. Есть ли способ достичь этого без пользовательских процессоров?

Я использовал следующий URL, чтобы получить знания: http://docs.spring.io/spring-data/rest/docs/2.3.0.BUILD-SNAPSHOT/reference/html/#repository-resources.collection-resource

+0

какая база данных? –

+0

Я уверен, что Spring Data выполняет сортировку на уровне базы данных и просто предоставляет нам удобный API. В зависимости от используемой базы данных могут быть разные настройки сортировки, например, на MSSQL Server, это приведет к таким результатам: CS AI (чувствительность к регистру нечувствительна к регистру). –

+0

Oracle 10g. Он сортирует, но в случае senaitive пути. Я хочу сортировать в случае нечувствительного способа – krzakov

ответ

1

Это в настоящее время не поддерживается в основном за счет фактически компонент перевода сортировочные параметры запроса HTTP только учитывает имя и направление собственности. Я подал DATACMNS-658, чтобы вы могли отслеживать это требование.

В качестве временного решения можно было бы написать аспект, который перехватывает вызовы методов запросов, которые вы хотите применять случай игнорируемых сортировки для применения:

@Aspect 
static class SortManipulatingAspect { 

    /** 
    * Intercept all calls to repositories. Might wanna be more specific in the 
    * pointcut to maker sure you don't unnecessarily intercept methods without 
    * a Sort. 
    */ 
    @Around("execution(public * org.springframework.data.repository.Repository+.*(..))") 
    public Object enableIgnoreCaseSorting(ProceedingJoinPoint joinPoint) throws Throwable { 
    return joinPoint.proceed(
     Arrays.stream(joinPoint.getArgs()).map(sortWithIgnoreCase()).toArray() 
    ); 
    } 

    private static Function<Object, Object> sortWithIgnoreCase() { 

    return (arg) -> arg instanceof Sort ? new Sort(
     toOrderStream((Sort) arg). 
     // Insert filter here to be selective about which orders to actually 
     // activate ignore-case on. 
     map(order -> order.ignoreCase()).// 
     collect(Collectors.toList())) : arg; 
    } 

    private static Stream<Order> toOrderStream(Sort sort) { 
    return StreamSupport.stream(sort.spliterator(), false); 
    } 
} 

Если вы объявляете сделать этот класс Весеннюю боб (по пикап через сканирование компонентов или явную регистрацию) все экземпляры Sort будут активированы.

Смежные вопросы