Skip to content

Commit 206f3f7

Browse files
david1601Mathias HinterndorferMathiasHijimschubert
authored
[Java][Spring] Add Spring pagination with vendor extension x-spring-paginated (#5022)
Co-authored-by: Mathias Hinterndorfer <[email protected]> Co-authored-by: Mathias Hinterndorfer <[email protected]> Co-authored-by: Jim Schubert <[email protected]>
1 parent 4fe76fc commit 206f3f7

File tree

523 files changed

+50884
-7
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

523 files changed

+50884
-7
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
generatorName: spring
2+
templateDir: modules/openapi-generator/src/main/resources/JavaSpring
3+
inputSpec: modules/openapi-generator/src/test/resources/2_0/petstore-with-spring-pageable.yaml
4+
outputDir: samples/client/petstore/spring-cloud-spring-pageable
5+
artifactId: spring-cloud-spring-pageable
6+
library: spring-cloud
7+
additionalProperties:
8+
hideGenerationTimestamp: 'true'
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
generatorName: spring
2+
templateDir: modules/openapi-generator/src/main/resources/JavaSpring
3+
inputSpec: modules/openapi-generator/src/test/resources/2_0/petstore-with-fake-endpoints-models-for-testing-with-spring-pageable.yaml
4+
outputDir: samples/server/petstore/spring-mvc-spring-pageable
5+
artifactId: spring-mvc-spring-pageable
6+
library: spring-mvc
7+
additionalProperties:
8+
hideGenerationTimestamp: 'true'
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
generatorName: spring
2+
templateDir: modules/openapi-generator/src/main/resources/JavaSpring
3+
inputSpec: modules/openapi-generator/src/test/resources/2_0/petstore-with-fake-endpoints-models-for-testing-with-spring-pageable.yaml
4+
outputDir: samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8
5+
artifactId: springboot-spring-pageable-delegatePattern-without-j8
6+
library: spring-boot
7+
delegatePattern: true
8+
java8: false
9+
additionalProperties:
10+
hideGenerationTimestamp: 'true'
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
generatorName: spring
2+
templateDir: modules/openapi-generator/src/main/resources/JavaSpring
3+
inputSpec: modules/openapi-generator/src/test/resources/2_0/petstore-with-fake-endpoints-models-for-testing-with-spring-pageable.yaml
4+
outputDir: samples/server/petstore/springboot-spring-pageable-delegatePattern
5+
artifactId: springboot-spring-pageable-delegatePattern
6+
library: spring-boot
7+
delegatePattern: true
8+
additionalProperties:
9+
hideGenerationTimestamp: 'true'
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
generatorName: spring
2+
templateDir: modules/openapi-generator/src/main/resources/JavaSpring
3+
inputSpec: modules/openapi-generator/src/test/resources/2_0/petstore-with-fake-endpoints-models-for-testing-with-spring-pageable.yaml
4+
outputDir: samples/server/petstore/springboot-spring-pageable-without-j8
5+
artifactId: springboot-spring-pageable-withoutj8
6+
library: spring-boot
7+
java8: false
8+
additionalProperties:
9+
hideGenerationTimestamp: 'true'
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
generatorName: spring
2+
templateDir: modules/openapi-generator/src/main/resources/JavaSpring
3+
inputSpec: modules/openapi-generator/src/test/resources/2_0/petstore-with-fake-endpoints-models-for-testing-with-spring-pageable.yaml
4+
outputDir: samples/server/petstore/springboot-spring-pageable
5+
artifactId: springboot-spring-pageable
6+
library: spring-boot
7+
additionalProperties:
8+
hideGenerationTimestamp: 'true'

modules/openapi-generator-maven-plugin/examples/spring.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,11 @@
8585
<groupId>org.springframework.boot</groupId>
8686
<artifactId>spring-boot-starter-web</artifactId>
8787
</dependency>
88+
89+
<dependency>
90+
<groupId>org.springframework.data</groupId>
91+
<artifactId>spring-data-commons</artifactId>
92+
</dependency>
8893
<!--SpringFox dependencies -->
8994
<dependency>
9095
<groupId>io.springfox</groupId>

modules/openapi-generator/src/main/resources/JavaSpring/api.mustache

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import org.springframework.http.ResponseEntity;
2020
{{#useBeanValidation}}
2121
import org.springframework.validation.annotation.Validated;
2222
{{/useBeanValidation}}
23+
import org.springframework.data.domain.Pageable;
2324
import org.springframework.web.bind.annotation.*;
2425
{{#jdk8-no-delegate}}
2526
{{^reactive}}
@@ -33,6 +34,7 @@ import reactor.core.publisher.Flux;
3334
import reactor.core.publisher.Mono;
3435
import org.springframework.http.codec.multipart.Part;
3536
{{/reactive}}
37+
import springfox.documentation.annotations.ApiIgnore;
3638

3739
{{#useBeanValidation}}
3840
import javax.validation.Valid;
@@ -124,19 +126,19 @@ public interface {{classname}} {
124126
produces = { {{#produces}}"{{{mediaType}}}"{{#hasMore}}, {{/hasMore}}{{/produces}} }{{/hasProduces}}{{#hasConsumes}},
125127
consumes = { {{#consumes}}"{{{mediaType}}}"{{#hasMore}}, {{/hasMore}}{{/consumes}} }{{/hasConsumes}}{{/singleContentTypes}}
126128
)
127-
{{#jdk8-default-interface}}default {{/jdk8-default-interface}}{{#responseWrapper}}{{.}}<{{/responseWrapper}}ResponseEntity<{{>returnTypes}}>{{#responseWrapper}}>{{/responseWrapper}} {{#delegate-method}}_{{/delegate-method}}{{operationId}}({{#allParams}}{{>queryParams}}{{>pathParams}}{{>headerParams}}{{>bodyParams}}{{>formParams}}{{>cookieParams}}{{#hasMore}},{{/hasMore}}{{^hasMore}}{{#reactive}}, {{/reactive}}{{/hasMore}}{{/allParams}}{{#reactive}}ServerWebExchange exchange{{/reactive}}){{^jdk8-default-interface}};{{/jdk8-default-interface}}{{#jdk8-default-interface}}{{#unhandledException}} throws Exception{{/unhandledException}} {
129+
{{#jdk8-default-interface}}default {{/jdk8-default-interface}}{{#responseWrapper}}{{.}}<{{/responseWrapper}}ResponseEntity<{{>returnTypes}}>{{#responseWrapper}}>{{/responseWrapper}} {{#delegate-method}}_{{/delegate-method}}{{operationId}}({{#allParams}}{{>queryParams}}{{>pathParams}}{{>headerParams}}{{>bodyParams}}{{>formParams}}{{>cookieParams}}{{#hasMore}},{{/hasMore}}{{^hasMore}}{{#reactive}}, {{/reactive}}{{/hasMore}}{{/allParams}}{{#reactive}}ServerWebExchange exchange{{/reactive}}{{#vendorExtensions.x-spring-paginated}}, @ApiIgnore final Pageable pageable{{/vendorExtensions.x-spring-paginated}}){{^jdk8-default-interface}};{{/jdk8-default-interface}}{{#jdk8-default-interface}}{{#unhandledException}} throws Exception{{/unhandledException}} {
128130
{{#delegate-method}}
129-
return {{operationId}}({{#allParams}}{{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}{{#reactive}}{{#hasParams}}, {{/hasParams}}exchange{{/reactive}});
131+
return {{operationId}}({{#allParams}}{{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}{{#reactive}}{{#hasParams}}, {{/hasParams}}exchange{{/reactive}}{{#vendorExtensions.x-spring-paginated}}, pageable{{/vendorExtensions.x-spring-paginated}});
130132
}
131133

132134
// Override this method
133-
{{#jdk8-default-interface}}default {{/jdk8-default-interface}} {{#responseWrapper}}{{.}}<{{/responseWrapper}}ResponseEntity<{{>returnTypes}}>{{#responseWrapper}}>{{/responseWrapper}} {{operationId}}({{#allParams}}{{^isFile}}{{^isBodyParam}}{{>optionalDataType}}{{/isBodyParam}}{{#isBodyParam}}{{^reactive}}{{{dataType}}}{{/reactive}}{{#reactive}}{{^isListContainer}}Mono{{/isListContainer}}{{#isListContainer}}Flux{{/isListContainer}}<{{{baseType}}}>{{/reactive}}{{/isBodyParam}}{{/isFile}}{{#isFile}}{{#reactive}}Flux<Part>{{/reactive}}{{^reactive}}MultipartFile{{/reactive}}{{/isFile}} {{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}{{#reactive}}{{#hasParams}}, {{/hasParams}}ServerWebExchange exchange{{/reactive}}){{#unhandledException}} throws Exception{{/unhandledException}} {
135+
{{#jdk8-default-interface}}default {{/jdk8-default-interface}} {{#responseWrapper}}{{.}}<{{/responseWrapper}}ResponseEntity<{{>returnTypes}}>{{#responseWrapper}}>{{/responseWrapper}} {{operationId}}({{#allParams}}{{^isFile}}{{^isBodyParam}}{{>optionalDataType}}{{/isBodyParam}}{{#isBodyParam}}{{^reactive}}{{{dataType}}}{{/reactive}}{{#reactive}}{{^isListContainer}}Mono{{/isListContainer}}{{#isListContainer}}Flux{{/isListContainer}}<{{{baseType}}}>{{/reactive}}{{/isBodyParam}}{{/isFile}}{{#isFile}}{{#reactive}}Flux<Part>{{/reactive}}{{^reactive}}MultipartFile{{/reactive}}{{/isFile}} {{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}{{#reactive}}{{#hasParams}}, {{/hasParams}}ServerWebExchange exchange{{/reactive}}{{#vendorExtensions.x-spring-paginated}}, @ApiIgnore final Pageable pageable{{/vendorExtensions.x-spring-paginated}}){{#unhandledException}} throws Exception{{/unhandledException}} {
134136
{{/delegate-method}}
135137
{{^isDelegate}}
136138
{{>methodBody}}
137139
{{/isDelegate}}
138140
{{#isDelegate}}
139-
return getDelegate().{{operationId}}({{#allParams}}{{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}{{#reactive}}{{#hasParams}}, {{/hasParams}}exchange{{/reactive}});
141+
return getDelegate().{{operationId}}({{#allParams}}{{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}{{#reactive}}{{#hasParams}}, {{/hasParams}}exchange{{/reactive}}{{#vendorExtensions.x-spring-paginated}}, pageable{{/vendorExtensions.x-spring-paginated}});
140142
{{/isDelegate}}
141143
}{{/jdk8-default-interface}}
142144

modules/openapi-generator/src/main/resources/JavaSpring/apiController.mustache

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ import org.springframework.web.context.request.NativeWebRequest;
2525
{{/isDelegate}}
2626
{{^jdk8}}
2727
import org.springframework.web.multipart.MultipartFile;
28+
import org.springframework.data.domain.Pageable;
29+
import springfox.documentation.annotations.ApiIgnore;
2830

2931
{{#useBeanValidation}}
3032
import javax.validation.constraints.*;
@@ -110,7 +112,7 @@ public class {{classname}}Controller implements {{classname}} {
110112
{{/externalDocs}}
111113
* @see {{classname}}#{{operationId}}
112114
*/
113-
public {{#responseWrapper}}{{.}}<{{/responseWrapper}}ResponseEntity<{{>returnTypes}}>{{#responseWrapper}}>{{/responseWrapper}} {{operationId}}({{#allParams}}{{>queryParams}}{{>pathParams}}{{>headerParams}}{{>bodyParams}}{{>formParams}}{{>cookieParams}}{{#hasMore}},{{/hasMore}}{{/allParams}}) {
115+
public {{#responseWrapper}}{{.}}<{{/responseWrapper}}ResponseEntity<{{>returnTypes}}>{{#responseWrapper}}>{{/responseWrapper}} {{operationId}}({{#allParams}}{{>queryParams}}{{>pathParams}}{{>headerParams}}{{>bodyParams}}{{>formParams}}{{>cookieParams}}{{#hasMore}},{{/hasMore}}{{/allParams}}{{#vendorExtensions.x-spring-paginated}}, @ApiIgnore final Pageable pageable{{/vendorExtensions.x-spring-paginated}}) {
114116
{{^isDelegate}}
115117
{{^async}}
116118
{{>methodBody}}
@@ -125,7 +127,7 @@ public class {{classname}}Controller implements {{classname}} {
125127
{{/async}}
126128
{{/isDelegate}}
127129
{{#isDelegate}}
128-
return delegate.{{operationId}}({{#allParams}}{{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}});
130+
return delegate.{{operationId}}({{#allParams}}{{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}{{#vendorExtensions.x-spring-paginated}}, pageable{{/vendorExtensions.x-spring-paginated}});
129131
{{/isDelegate}}
130132
}
131133

modules/openapi-generator/src/main/resources/JavaSpring/apiDelegate.mustache

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package {{package}};
33
{{#imports}}import {{import}};
44
{{/imports}}
55
import io.swagger.annotations.*;
6+
import org.springframework.data.domain.Pageable;
67
{{#jdk8}}
78
import org.springframework.http.HttpStatus;
89
import org.springframework.http.MediaType;
@@ -70,7 +71,7 @@ public interface {{classname}}Delegate {
7071
*/
7172
{{#jdk8-default-interface}}default {{/jdk8-default-interface}}{{#responseWrapper}}{{.}}<{{/responseWrapper}}ResponseEntity<{{>returnTypes}}>{{#responseWrapper}}>{{/responseWrapper}} {{operationId}}({{#allParams}}{{^isFile}}{{^isBodyParam}}{{>optionalDataType}}{{/isBodyParam}}{{#isBodyParam}}{{^reactive}}{{{dataType}}}{{/reactive}}{{#reactive}}{{^isListContainer}}Mono{{/isListContainer}}{{#isListContainer}}Flux{{/isListContainer}}<{{{baseType}}}>{{/reactive}}{{/isBodyParam}}{{/isFile}}{{#isFile}}{{#isListContainer}}List<{{/isListContainer}}{{#reactive}}Flux<Part>{{/reactive}}{{^reactive}}MultipartFile{{/reactive}}{{#isListContainer}}>{{/isListContainer}}{{/isFile}} {{paramName}}{{#hasMore}},
7273
{{/hasMore}}{{/allParams}}{{#reactive}}{{#hasParams}},
73-
{{/hasParams}}ServerWebExchange exchange{{/reactive}}){{#unhandledException}} throws Exception{{/unhandledException}}{{^jdk8-default-interface}};{{/jdk8-default-interface}}{{#jdk8-default-interface}} {
74+
{{/hasParams}}ServerWebExchange exchange{{/reactive}}{{#vendorExtensions.x-spring-paginated}}, final Pageable pageable{{/vendorExtensions.x-spring-paginated}}){{#unhandledException}} throws Exception{{/unhandledException}}{{^jdk8-default-interface}};{{/jdk8-default-interface}}{{#jdk8-default-interface}} {
7475
{{>methodBody}}
7576
}{{/jdk8-default-interface}}
7677

modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-boot/pom.mustache

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
{{#useSpringfox}}
1313
<springfox-version>2.9.2</springfox-version>
1414
{{/useSpringfox}}
15+
<jackson-databind-version>2.9.8</jackson-databind-version>
1516
</properties>
1617
{{#parentOverridden}}
1718
<parent>
@@ -82,6 +83,10 @@
8283
<groupId>org.springframework.boot</groupId>
8384
<artifactId>spring-boot-starter-web{{#reactive}}flux{{/reactive}}</artifactId>
8485
</dependency>
86+
<dependency>
87+
<groupId>org.springframework.data</groupId>
88+
<artifactId>spring-data-commons</artifactId>
89+
</dependency>
8590
{{#useSpringfox}}
8691
<!--SpringFox dependencies -->
8792
<dependency>
@@ -101,6 +106,11 @@
101106
</dependency>
102107
{{/useSpringfox}}
103108
{{^useSpringfox}}
109+
<dependency>
110+
<groupId>io.springfox</groupId>
111+
<artifactId>springfox-swagger2</artifactId>
112+
<version>2.8.0</version>
113+
</dependency>
104114
<dependency>
105115
<groupId>org.webjars</groupId>
106116
<artifactId>swagger-ui</artifactId>
@@ -189,5 +199,10 @@
189199
<artifactId>spring-boot-starter-hateoas</artifactId>
190200
</dependency>
191201
{{/hateoas}}
202+
<dependency>
203+
<groupId>com.fasterxml.jackson.core</groupId>
204+
<artifactId>jackson-databind</artifactId>
205+
<version>${jackson-databind-version}</version>
206+
</dependency>
192207
</dependencies>
193208
</project>

modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-cloud/pom.mustache

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,5 +123,14 @@
123123
{{/parentOverridden}}
124124
</dependency>
125125
{{/useBeanValidation}}
126+
<dependency>
127+
<groupId>io.springfox</groupId>
128+
<artifactId>springfox-swagger2</artifactId>
129+
<version>2.8.0</version>
130+
</dependency>
131+
<dependency>
132+
<groupId>org.springframework.data</groupId>
133+
<artifactId>spring-data-commons</artifactId>
134+
</dependency>
126135
</dependencies>
127136
</project>

modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-mvc/openapiUiConfiguration.mustache

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ import org.threeten.bp.OffsetDateTime;
2828
import org.threeten.bp.ZonedDateTime;
2929
{{/threetenbp}}
3030

31+
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
32+
import org.springframework.data.web.PageableHandlerMethodArgumentResolver;
33+
3134
import java.util.List;
3235

3336
{{>generatedAnnotation}}
@@ -63,6 +66,12 @@ public class OpenAPIUiConfiguration extends WebMvcConfigurerAdapter {
6366
}
6467
}
6568

69+
@Override
70+
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
71+
argumentResolvers.add(new PageableHandlerMethodArgumentResolver());
72+
super.addArgumentResolvers(argumentResolvers);
73+
}
74+
6675
@Override
6776
public void addResourceHandlers(ResourceHandlerRegistry registry) {
6877
if (!registry.hasMappingForPattern("/webjars/**")) {

modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-mvc/pom.mustache

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,17 @@
167167
</dependency>
168168
{{/useSpringfox}}
169169
{{^useSpringfox}}
170+
<dependency>
171+
<groupId>io.springfox</groupId>
172+
<artifactId>springfox-swagger2</artifactId>
173+
<version>${springfox-version}</version>
174+
<exclusions>
175+
<exclusion>
176+
<groupId>com.fasterxml.jackson.core</groupId>
177+
<artifactId>jackson-annotations</artifactId>
178+
</exclusion>
179+
</exclusions>
180+
</dependency>
170181
<dependency>
171182
<groupId>org.webjars</groupId>
172183
<artifactId>swagger-ui</artifactId>
@@ -253,6 +264,16 @@
253264
<version>1.0.1.RELEASE</version>
254265
</dependency>
255266
{{/hateoas}}
267+
<dependency>
268+
<groupId>org.springframework.data</groupId>
269+
<artifactId>spring-data-commons</artifactId>
270+
<version>2.0.11.RELEASE</version>
271+
</dependency>
272+
<dependency>
273+
<groupId>com.fasterxml.jackson.core</groupId>
274+
<artifactId>jackson-databind</artifactId>
275+
<version>${jackson-databind-version}</version>
276+
</dependency>
256277
</dependencies>
257278
<properties>
258279
<java.version>{{#java8}}1.8{{/java8}}{{^java8}}1.7{{/java8}}</java.version>
@@ -272,5 +293,6 @@
272293
{{#openApiNullable}}
273294
<jackson-databind-nullable-version>0.2.1</jackson-databind-nullable-version>
274295
{{/openApiNullable}}
296+
<jackson-databind-version>2.9.8</jackson-databind-version>
275297
</properties>
276298
</project>

0 commit comments

Comments
 (0)