2
2
3
3
import java .lang .annotation .Annotation ;
4
4
import java .lang .reflect .Field ;
5
+ import java .util .Optional ;
5
6
6
7
import io .swagger .v3 .oas .annotations .ExternalDocumentation ;
7
8
import io .swagger .v3 .oas .annotations .Parameter ;
22
23
import org .springdoc .core .converters .models .Pageable ;
23
24
import org .springdoc .core .customizers .DelegatingMethodParameterCustomizer ;
24
25
26
+ import org .springframework .boot .autoconfigure .data .web .SpringDataWebProperties ;
25
27
import org .springframework .core .MethodParameter ;
26
28
import org .springframework .data .web .PageableDefault ;
27
29
@@ -35,11 +37,16 @@ public class DataRestDelegatingMethodParameterCustomizer implements DelegatingMe
35
37
*/
36
38
private static final Logger LOGGER = LoggerFactory .getLogger (DataRestDelegatingMethodParameterCustomizer .class );
37
39
40
+ private final Optional <SpringDataWebProperties > optionalSpringDataWebProperties ;
41
+
42
+ public DataRestDelegatingMethodParameterCustomizer (Optional <SpringDataWebProperties > optionalSpringDataWebProperties ) {
43
+ this .optionalSpringDataWebProperties = optionalSpringDataWebProperties ;
44
+ }
38
45
39
46
@ Override
40
47
public void customize (MethodParameter originalParameter , MethodParameter methodParameter ) {
41
48
PageableDefault pageableDefault = originalParameter .getParameterAnnotation (PageableDefault .class );
42
- if (pageableDefault != null ) {
49
+ if (pageableDefault != null || optionalSpringDataWebProperties . isPresent () ) {
43
50
Field field = FieldUtils .getDeclaredField (DelegatingMethodParameter .class , "additionalParameterAnnotations" , true );
44
51
try {
45
52
Annotation [] parameterAnnotations = (Annotation []) field .get (methodParameter );
@@ -62,8 +69,7 @@ public void customize(MethodParameter originalParameter, MethodParameter methodP
62
69
* @param pageableDefault the pageable default
63
70
* @return the new parameter annotation for field
64
71
*/
65
- private static Annotation getNewParameterAnnotationForField (String parameterName , PageableDefault pageableDefault ) {
66
- String defaultValue = getDefaultValue (parameterName , pageableDefault );
72
+ private Annotation getNewParameterAnnotationForField (String parameterName , PageableDefault pageableDefault ) {
67
73
Field field ;
68
74
Parameter parameterNew = null ;
69
75
try {
@@ -77,10 +83,7 @@ public Class<? extends Annotation> annotationType() {
77
83
78
84
@ Override
79
85
public String name () {
80
- if (parameterName .equals ("sort" ))
81
- return defaultValue ;
82
- else
83
- return parameter .name ();
86
+ return getName (parameterName , pageableDefault , parameter .name ());
84
87
}
85
88
86
89
@ Override
@@ -289,10 +292,7 @@ public String[] allowableValues() {
289
292
290
293
@ Override
291
294
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 ());
296
296
}
297
297
298
298
@ Override
@@ -369,27 +369,65 @@ public String ref() {
369
369
return parameterNew ;
370
370
}
371
371
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
+
372
403
/**
373
404
* Gets default value.
374
405
*
375
406
* @param parameterName the parameter name
376
407
* @param pageableDefault the pageable default
408
+ * @param defaultSchemaVal the default schema val
377
409
* @return the default value
378
410
*/
379
- private static String getDefaultValue (String parameterName , PageableDefault pageableDefault ) {
411
+ private String getDefaultValue (String parameterName , PageableDefault pageableDefault , String defaultSchemaVal ) {
380
412
String defaultValue = null ;
381
413
switch (parameterName ) {
382
414
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 ());
384
419
break ;
385
420
case "sort" :
386
- defaultValue = String .join ("," , pageableDefault .sort ());
421
+ if (pageableDefault != null )
422
+ defaultValue = defaultSchemaVal ;
387
423
break ;
388
424
case "page" :
389
- defaultValue = String .valueOf (pageableDefault .page ());
425
+ if (pageableDefault != null )
426
+ defaultValue = String .valueOf (pageableDefault .page ());
390
427
break ;
391
428
case "direction" :
392
- defaultValue = pageableDefault .direction ().name ();
429
+ if (pageableDefault != null )
430
+ defaultValue = pageableDefault .direction ().name ();
393
431
break ;
394
432
default :
395
433
// Do nothing here
0 commit comments