diff --git a/springdoc-openapi-common/src/main/java/org/springdoc/core/customizers/DataRestDelegatingMethodParameterCustomizer.java b/springdoc-openapi-common/src/main/java/org/springdoc/core/customizers/DataRestDelegatingMethodParameterCustomizer.java index d43123e08..eae873f3b 100644 --- a/springdoc-openapi-common/src/main/java/org/springdoc/core/customizers/DataRestDelegatingMethodParameterCustomizer.java +++ b/springdoc-openapi-common/src/main/java/org/springdoc/core/customizers/DataRestDelegatingMethodParameterCustomizer.java @@ -24,10 +24,9 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import java.util.Optional; +import java.util.*; +import java.util.regex.Pattern; +import java.util.stream.Collectors; import com.fasterxml.jackson.core.JsonProcessingException; import io.swagger.v3.core.util.ObjectMapperFactory; @@ -805,11 +804,7 @@ private String getArrayDefaultValue(String parameterName, PageableDefault pageab if ("sort".equals(parameterName)) { DefaultSort defaultSort = getDefaultSort(pageableDefault, sortDefault); if (defaultSort != null && ArrayUtils.isNotEmpty(defaultSort.properties)) { - List sortValues = new ArrayList<>(); - for (String sortValue : defaultSort.properties) { - String sortStr = String.join(",", sortValue, defaultSort.direction.name()); - sortValues.add(sortStr); - } + final List sortValues = defaultSort.getEffectiveProperties(); try { defaultValue = ObjectMapperFactory.buildStrictGenericObjectMapper().writeValueAsString(sortValues); } @@ -881,6 +876,13 @@ private boolean isRepositoryRestConfigurationPresent() { } private static class DefaultSort { + + private static final String DIRECTION_GROUP = Arrays.stream(Sort.Direction.values()).map(Enum::name).collect(Collectors.joining("|")); + + private static final String DIRECTED_REGEXP = "\\w+(\\.\\w+)*,\\s*(" + DIRECTION_GROUP + ')'; + + private static final Pattern DIRECTED_PATTERN = Pattern.compile(DIRECTED_REGEXP, Pattern.CASE_INSENSITIVE); + private final Sort.Direction direction; private final String[] properties; @@ -889,5 +891,16 @@ private static class DefaultSort { this.direction = direction; this.properties = properties; } + + List getEffectiveProperties() { + return Arrays.stream(properties) + .map(p -> { + if (DIRECTED_PATTERN.matcher(p).matches()) { + return p; + } + return p + ',' + direction.name(); + }) + .collect(Collectors.toList()); + } } -} \ No newline at end of file +}