24
24
25
25
import java .lang .annotation .Annotation ;
26
26
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 ;
31
30
32
31
import com .fasterxml .jackson .core .JsonProcessingException ;
33
32
import io .swagger .v3 .core .util .ObjectMapperFactory ;
@@ -805,11 +804,7 @@ private String getArrayDefaultValue(String parameterName, PageableDefault pageab
805
804
if ("sort" .equals (parameterName )) {
806
805
DefaultSort defaultSort = getDefaultSort (pageableDefault , sortDefault );
807
806
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 ();
813
808
try {
814
809
defaultValue = ObjectMapperFactory .buildStrictGenericObjectMapper ().writeValueAsString (sortValues );
815
810
}
@@ -881,6 +876,13 @@ private boolean isRepositoryRestConfigurationPresent() {
881
876
}
882
877
883
878
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
+
884
886
private final Sort .Direction direction ;
885
887
886
888
private final String [] properties ;
@@ -889,5 +891,16 @@ private static class DefaultSort {
889
891
this .direction = direction ;
890
892
this .properties = properties ;
891
893
}
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
+ }
892
905
}
893
- }
906
+ }
0 commit comments