22
33import java .lang .annotation .Annotation ;
44import java .lang .reflect .Field ;
5+ import java .util .Optional ;
56
67import io .swagger .v3 .oas .annotations .ExternalDocumentation ;
78import io .swagger .v3 .oas .annotations .Parameter ;
2223import org .springdoc .core .converters .models .Pageable ;
2324import org .springdoc .core .customizers .DelegatingMethodParameterCustomizer ;
2425
26+ import org .springframework .boot .autoconfigure .data .web .SpringDataWebProperties ;
2527import org .springframework .core .MethodParameter ;
2628import org .springframework .data .web .PageableDefault ;
2729
@@ -35,11 +37,16 @@ public class DataRestDelegatingMethodParameterCustomizer implements DelegatingMe
3537 */
3638 private static final Logger LOGGER = LoggerFactory .getLogger (DataRestDelegatingMethodParameterCustomizer .class );
3739
40+ private final Optional <SpringDataWebProperties > optionalSpringDataWebProperties ;
41+
42+ public DataRestDelegatingMethodParameterCustomizer (Optional <SpringDataWebProperties > optionalSpringDataWebProperties ) {
43+ this .optionalSpringDataWebProperties = optionalSpringDataWebProperties ;
44+ }
3845
3946 @ Override
4047 public void customize (MethodParameter originalParameter , MethodParameter methodParameter ) {
4148 PageableDefault pageableDefault = originalParameter .getParameterAnnotation (PageableDefault .class );
42- if (pageableDefault != null ) {
49+ if (pageableDefault != null || optionalSpringDataWebProperties . isPresent () ) {
4350 Field field = FieldUtils .getDeclaredField (DelegatingMethodParameter .class , "additionalParameterAnnotations" , true );
4451 try {
4552 Annotation [] parameterAnnotations = (Annotation []) field .get (methodParameter );
@@ -62,8 +69,7 @@ public void customize(MethodParameter originalParameter, MethodParameter methodP
6269 * @param pageableDefault the pageable default
6370 * @return the new parameter annotation for field
6471 */
65- private static Annotation getNewParameterAnnotationForField (String parameterName , PageableDefault pageableDefault ) {
66- String defaultValue = getDefaultValue (parameterName , pageableDefault );
72+ private Annotation getNewParameterAnnotationForField (String parameterName , PageableDefault pageableDefault ) {
6773 Field field ;
6874 Parameter parameterNew = null ;
6975 try {
@@ -77,10 +83,7 @@ public Class<? extends Annotation> annotationType() {
7783
7884 @ Override
7985 public String name () {
80- if (parameterName .equals ("sort" ))
81- return defaultValue ;
82- else
83- return parameter .name ();
86+ return getName (parameterName , pageableDefault , parameter .name ());
8487 }
8588
8689 @ Override
@@ -289,10 +292,7 @@ public String[] allowableValues() {
289292
290293 @ Override
291294 public String defaultValue () {
292- if (!parameterName .equals ("sort" ))
293- return defaultValue ;
294- else
295- return parameter .schema ().defaultValue ();
295+ return getDefaultValue (parameterName , pageableDefault , parameter .schema ().defaultValue ());
296296 }
297297
298298 @ Override
@@ -369,27 +369,65 @@ public String ref() {
369369 return parameterNew ;
370370 }
371371
372+ private String getName (String parameterName , PageableDefault pageableDefault , String originalName ) {
373+ String name = null ;
374+ switch (parameterName ) {
375+ case "size" :
376+ if (optionalSpringDataWebProperties .isPresent ())
377+ name = optionalSpringDataWebProperties .get ().getPageable ().getSizeParameter ();
378+ else
379+ name = originalName ;
380+ break ;
381+ case "sort" :
382+ if (pageableDefault != null && ArrayUtils .isNotEmpty (pageableDefault .sort ()))
383+ name = String .join ("," , pageableDefault .sort ());
384+ else if (optionalSpringDataWebProperties .isPresent ())
385+ name = optionalSpringDataWebProperties .get ().getSort ().getSortParameter ();
386+ break ;
387+ case "page" :
388+ if (optionalSpringDataWebProperties .isPresent ())
389+ name = optionalSpringDataWebProperties .get ().getPageable ().getPageParameter ();
390+ else
391+ name = originalName ;
392+ break ;
393+ case "direction" :
394+ name = originalName ;
395+ break ;
396+ default :
397+ // Do nothing here
398+ break ;
399+ }
400+ return name ;
401+ }
402+
372403 /**
373404 * Gets default value.
374405 *
375406 * @param parameterName the parameter name
376407 * @param pageableDefault the pageable default
408+ * @param defaultSchemaVal the default schema val
377409 * @return the default value
378410 */
379- private static String getDefaultValue (String parameterName , PageableDefault pageableDefault ) {
411+ private String getDefaultValue (String parameterName , PageableDefault pageableDefault , String defaultSchemaVal ) {
380412 String defaultValue = null ;
381413 switch (parameterName ) {
382414 case "size" :
383- defaultValue = String .valueOf (pageableDefault .size ());
415+ if (pageableDefault != null )
416+ defaultValue = String .valueOf (pageableDefault .size ());
417+ else if (optionalSpringDataWebProperties .isPresent ())
418+ defaultValue = String .valueOf (optionalSpringDataWebProperties .get ().getPageable ().getDefaultPageSize ());
384419 break ;
385420 case "sort" :
386- defaultValue = String .join ("," , pageableDefault .sort ());
421+ if (pageableDefault != null )
422+ defaultValue = defaultSchemaVal ;
387423 break ;
388424 case "page" :
389- defaultValue = String .valueOf (pageableDefault .page ());
425+ if (pageableDefault != null )
426+ defaultValue = String .valueOf (pageableDefault .page ());
390427 break ;
391428 case "direction" :
392- defaultValue = pageableDefault .direction ().name ();
429+ if (pageableDefault != null )
430+ defaultValue = pageableDefault .direction ().name ();
393431 break ;
394432 default :
395433 // Do nothing here
0 commit comments