/** * Reads the default {@link Sort} to be used from the given {@link MethodParameter}. Rejects the parameter if both an * {@link SortDefaults} and {@link SortDefault} annotation is found as we cannot build a reliable {@link Sort} * instance then (property ordering). * * @param parameter will never be {@literal null}. * @return the default {@link Sort} instance derived from the parameter annotations or the configured fallback-sort * {@link #setFallbackSort(Sort)}. */ private Sort getDefaultFromAnnotationOrFallback(MethodParameter parameter) { SortDefaults annotatedDefaults = parameter.getParameterAnnotation(SortDefaults.class); SortDefault annotatedDefault = parameter.getParameterAnnotation(SortDefault.class); if (annotatedDefault != null && annotatedDefaults != null) { throw new IllegalArgumentException( String.format("Cannot use both @%s and @%s on parameter %s! Move %s into %s to define sorting order!", SORT_DEFAULTS_NAME, SORT_DEFAULT_NAME, parameter.toString(), SORT_DEFAULT_NAME, SORT_DEFAULTS_NAME)); } if (annotatedDefault != null) { return appendOrCreateSortTo(annotatedDefault, Sort.unsorted()); } if (annotatedDefaults != null) { Sort sort = Sort.unsorted(); for (SortDefault currentAnnotatedDefault : annotatedDefaults.value()) { sort = appendOrCreateSortTo(currentAnnotatedDefault, sort); } return sort; } return fallbackSort; }