Skip to content

Commit 366ca24

Browse files
eriktimwing328
authored andcommitted
Add option to disable default interfaces (#3022)
1 parent 45da167 commit 366ca24

4 files changed

Lines changed: 23 additions & 11 deletions

File tree

docs/generators/spring.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ sidebar_label: spring
4848
|interfaceOnly|Whether to generate only API interface stubs without the server files.| |false|
4949
|delegatePattern|Whether to generate the server files using the delegate pattern| |false|
5050
|singleContentTypes|Whether to select only one produces/consumes content-type by operation.| |false|
51+
|skipDefaultInterface|Whether to generate default implementations for java8 interfaces| |false|
5152
|async|use async Callable controllers| |false|
5253
|reactive|wrap responses in Mono/Flux Reactor types (spring-boot only)| |false|
5354
|responseWrapper|wrap the responses in given type (Future,Callable,CompletableFuture,ListenableFuture,DeferredResult,HystrixCommand,RxObservable,RxSingle or fully qualified type)| |null|

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ public class SpringCodegen extends AbstractJavaCodegen
5252
public static final String DELEGATE_PATTERN = "delegatePattern";
5353
public static final String SINGLE_CONTENT_TYPES = "singleContentTypes";
5454
public static final String VIRTUAL_SERVICE = "virtualService";
55+
public static final String SKIP_DEFAULT_INTERFACE = "skipDefaultInterface";
5556

5657
public static final String JAVA_8 = "java8";
5758
public static final String ASYNC = "async";
@@ -79,6 +80,7 @@ public class SpringCodegen extends AbstractJavaCodegen
7980
protected boolean async = false;
8081
protected boolean reactive = false;
8182
protected String responseWrapper = "";
83+
protected boolean skipDefaultInterface = false;
8284
protected boolean useTags = false;
8385
protected boolean useBeanValidation = true;
8486
protected boolean performBeanValidation = false;
@@ -119,6 +121,7 @@ public SpringCodegen() {
119121
cliOptions.add(CliOption.newBoolean(DELEGATE_PATTERN, "Whether to generate the server files using the delegate pattern", delegatePattern));
120122
cliOptions.add(CliOption.newBoolean(SINGLE_CONTENT_TYPES, "Whether to select only one produces/consumes content-type by operation.", singleContentTypes));
121123
updateJava8CliOptions();
124+
cliOptions.add(CliOption.newBoolean(SKIP_DEFAULT_INTERFACE, "Whether to generate default implementations for java8 interfaces", skipDefaultInterface));
122125
cliOptions.add(CliOption.newBoolean(ASYNC, "use async Callable controllers", async));
123126
cliOptions.add(CliOption.newBoolean(REACTIVE, "wrap responses in Mono/Flux Reactor types (spring-boot only)", reactive));
124127
cliOptions.add(new CliOption(RESPONSE_WRAPPER, "wrap the responses in given type (Future,Callable,CompletableFuture,ListenableFuture,DeferredResult,HystrixCommand,RxObservable,RxSingle or fully qualified type)"));
@@ -234,6 +237,10 @@ public void processOpts() {
234237
this.setSingleContentTypes(Boolean.valueOf(additionalProperties.get(SINGLE_CONTENT_TYPES).toString()));
235238
}
236239

240+
if (additionalProperties.containsKey(SKIP_DEFAULT_INTERFACE)) {
241+
this.setSkipDefaultInterface(Boolean.valueOf(additionalProperties.get(SKIP_DEFAULT_INTERFACE).toString()));
242+
}
243+
237244
if (additionalProperties.containsKey(ASYNC)) {
238245
this.setAsync(Boolean.valueOf(additionalProperties.get(ASYNC).toString()));
239246
//fix for issue/1164
@@ -393,6 +400,7 @@ public void processOpts() {
393400

394401
if (this.java8) {
395402
additionalProperties.put("javaVersion", "1.8");
403+
additionalProperties.put("jdk8-default-interface", !this.skipDefaultInterface);
396404
if (!SPRING_CLOUD_LIBRARY.equals(library)) {
397405
additionalProperties.put("jdk8", true);
398406
}
@@ -414,6 +422,7 @@ public void processOpts() {
414422
// Some well-known Spring or Spring-Cloud response wrappers
415423
if (isNotEmpty(this.responseWrapper)) {
416424
additionalProperties.put("jdk8", false);
425+
additionalProperties.put("jdk8-default-interface", false);
417426
switch (this.responseWrapper) {
418427
case "Future":
419428
case "Callable":
@@ -716,6 +725,8 @@ public void setSingleContentTypes(boolean singleContentTypes) {
716725
this.singleContentTypes = singleContentTypes;
717726
}
718727

728+
public void setSkipDefaultInterface(boolean skipDefaultInterface) { this.skipDefaultInterface = skipDefaultInterface; }
729+
719730
public void setJava8(boolean java8) { this.java8 = java8; }
720731

721732
public void setVirtualService(boolean virtualService) { this.virtualService = virtualService; }

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ import java.util.concurrent.{{^jdk8}}Callable{{/jdk8}}{{#jdk8}}CompletableFuture
6666
@VirtualService
6767
{{/virtualService}}
6868
public interface {{classname}} {
69-
{{#jdk8}}
69+
{{#jdk8-default-interface}}
7070
{{^isDelegate}}
7171
{{^reactive}}
7272

@@ -81,7 +81,7 @@ public interface {{classname}} {
8181
return new {{classname}}Delegate() {};
8282
}
8383
{{/isDelegate}}
84-
{{/jdk8}}
84+
{{/jdk8-default-interface}}
8585
{{#operation}}
8686

8787
{{#virtualService}}
@@ -109,22 +109,22 @@ public interface {{classname}} {
109109
produces = { {{#produces}}"{{{mediaType}}}"{{#hasMore}}, {{/hasMore}}{{/produces}} }, {{/hasProduces}}{{#hasConsumes}}
110110
consumes = { {{#consumes}}"{{{mediaType}}}"{{#hasMore}}, {{/hasMore}}{{/consumes}} },{{/hasConsumes}}{{/singleContentTypes}}
111111
method = RequestMethod.{{httpMethod}})
112-
{{#jdk8}}default {{/jdk8}}{{#responseWrapper}}{{.}}<{{/responseWrapper}}ResponseEntity<{{>returnTypes}}>{{#responseWrapper}}>{{/responseWrapper}} {{#delegate-method}}_{{/delegate-method}}{{operationId}}({{#allParams}}{{>queryParams}}{{>pathParams}}{{>headerParams}}{{>bodyParams}}{{>formParams}}{{#hasMore}},{{/hasMore}}{{^hasMore}}{{#reactive}}, {{/reactive}}{{/hasMore}}{{/allParams}}{{#reactive}}ServerWebExchange exchange{{/reactive}}){{^jdk8}};{{/jdk8}}{{#jdk8}}{{#unhandledException}} throws Exception{{/unhandledException}} {
112+
{{#jdk8-default-interface}}default {{/jdk8-default-interface}}{{#responseWrapper}}{{.}}<{{/responseWrapper}}ResponseEntity<{{>returnTypes}}>{{#responseWrapper}}>{{/responseWrapper}} {{#delegate-method}}_{{/delegate-method}}{{operationId}}({{#allParams}}{{>queryParams}}{{>pathParams}}{{>headerParams}}{{>bodyParams}}{{>formParams}}{{#hasMore}},{{/hasMore}}{{^hasMore}}{{#reactive}}, {{/reactive}}{{/hasMore}}{{/allParams}}{{#reactive}}ServerWebExchange exchange{{/reactive}}){{^jdk8-default-interface}};{{/jdk8-default-interface}}{{#jdk8-default-interface}}{{#unhandledException}} throws Exception{{/unhandledException}} {
113113
{{#delegate-method}}
114114
return {{operationId}}({{#allParams}}{{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}{{#reactive}}{{#hasParams}}, {{/hasParams}}exchange{{/reactive}});
115115
}
116116

117117
// Override this method
118-
{{#jdk8}}default {{/jdk8}} {{#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}}MultipartFile{{/isFile}} {{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}{{#reactive}}{{#hasParams}}, {{/hasParams}}ServerWebExchange exchange{{/reactive}}) {
118+
{{#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}}MultipartFile{{/isFile}} {{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}{{#reactive}}{{#hasParams}}, {{/hasParams}}ServerWebExchange exchange{{/reactive}}) {
119119
{{/delegate-method}}
120120
{{^isDelegate}}
121121
{{>methodBody}}
122122
{{/isDelegate}}
123123
{{#isDelegate}}
124124
return getDelegate().{{operationId}}({{#allParams}}{{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}{{#reactive}}{{#hasParams}}, {{/hasParams}}exchange{{/reactive}});
125125
{{/isDelegate}}
126-
}{{/jdk8}}
126+
}{{/jdk8-default-interface}}
127127

128128
{{/operation}}
129129
}
130-
{{/operations}}
130+
{{/operations}}

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,22 +39,22 @@ import java.util.concurrent.{{^jdk8}}Callable{{/jdk8}}{{#jdk8}}CompletableFuture
3939
*/
4040
{{>generatedAnnotation}}
4141
public interface {{classname}}Delegate {
42-
{{#jdk8}}
42+
{{#jdk8-default-interface}}
4343

4444
default Optional<NativeWebRequest> getRequest() {
4545
return Optional.empty();
4646
}
47-
{{/jdk8}}
47+
{{/jdk8-default-interface}}
4848

4949
{{#operation}}
5050
/**
5151
* @see {{classname}}#{{operationId}}
5252
*/
53-
{{#jdk8}}default {{/jdk8}}{{#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}}MultipartFile{{/isFile}} {{paramName}}{{#hasMore}},
53+
{{#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}}MultipartFile{{/isFile}} {{paramName}}{{#hasMore}},
5454
{{/hasMore}}{{/allParams}}{{#reactive}}{{#hasParams}},
55-
{{/hasParams}}ServerWebExchange exchange{{/reactive}}){{^jdk8}};{{/jdk8}}{{#jdk8}} {
55+
{{/hasParams}}ServerWebExchange exchange{{/reactive}}){{^jdk8-default-interface}};{{/jdk8-default-interface}}{{#jdk8-default-interface}} {
5656
{{>methodBody}}
57-
}{{/jdk8}}
57+
}{{/jdk8-default-interface}}
5858

5959
{{/operation}}
6060
}

0 commit comments

Comments
 (0)