Skip to content

Commit 8415e5e

Browse files
authored
Merge pull request #2159 from onacit/issues/2152
[#2152] Detect directions in default sort values
2 parents 7f7f313 + 5920610 commit 8415e5e

File tree

1 file changed

+23
-10
lines changed

1 file changed

+23
-10
lines changed

springdoc-openapi-common/src/main/java/org/springdoc/core/customizers/DataRestDelegatingMethodParameterCustomizer.java

+23-10
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,9 @@
2424

2525
import java.lang.annotation.Annotation;
2626
import java.lang.reflect.Field;
27-
import java.util.ArrayList;
28-
import java.util.List;
29-
import java.util.Objects;
30-
import java.util.Optional;
27+
import java.util.*;
28+
import java.util.regex.Pattern;
29+
import java.util.stream.Collectors;
3130

3231
import com.fasterxml.jackson.core.JsonProcessingException;
3332
import io.swagger.v3.core.util.ObjectMapperFactory;
@@ -805,11 +804,7 @@ private String getArrayDefaultValue(String parameterName, PageableDefault pageab
805804
if ("sort".equals(parameterName)) {
806805
DefaultSort defaultSort = getDefaultSort(pageableDefault, sortDefault);
807806
if (defaultSort != null && ArrayUtils.isNotEmpty(defaultSort.properties)) {
808-
List<String> sortValues = new ArrayList<>();
809-
for (String sortValue : defaultSort.properties) {
810-
String sortStr = String.join(",", sortValue, defaultSort.direction.name());
811-
sortValues.add(sortStr);
812-
}
807+
final List<String> sortValues = defaultSort.getEffectiveProperties();
813808
try {
814809
defaultValue = ObjectMapperFactory.buildStrictGenericObjectMapper().writeValueAsString(sortValues);
815810
}
@@ -881,6 +876,13 @@ private boolean isRepositoryRestConfigurationPresent() {
881876
}
882877

883878
private static class DefaultSort {
879+
880+
private static final String DIRECTION_GROUP = Arrays.stream(Sort.Direction.values()).map(Enum::name).collect(Collectors.joining("|"));
881+
882+
private static final String DIRECTED_REGEXP = "\\w+(\\.\\w+)*,\\s*(" + DIRECTION_GROUP + ')';
883+
884+
private static final Pattern DIRECTED_PATTERN = Pattern.compile(DIRECTED_REGEXP, Pattern.CASE_INSENSITIVE);
885+
884886
private final Sort.Direction direction;
885887

886888
private final String[] properties;
@@ -889,5 +891,16 @@ private static class DefaultSort {
889891
this.direction = direction;
890892
this.properties = properties;
891893
}
894+
895+
List<String> getEffectiveProperties() {
896+
return Arrays.stream(properties)
897+
.map(p -> {
898+
if (DIRECTED_PATTERN.matcher(p).matches()) {
899+
return p;
900+
}
901+
return p + ',' + direction.name();
902+
})
903+
.collect(Collectors.toList());
904+
}
892905
}
893-
}
906+
}

0 commit comments

Comments
 (0)