2424
2525import java .lang .annotation .Annotation ;
2626import 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
3231import com .fasterxml .jackson .core .JsonProcessingException ;
3332import 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