Issue #6471 Add java8, interfaceOnly, delegatePattern to generated server stubs (#6476)

* java 8 interface only delegate method mode

* typo correction

* Update samples with ./bin/spring-all-petstore.sh

* change delegate prefix to "do" and make delegate method a default method that returns an OK status code

* remove temp debug printout

* prefix spring annotated method with "_" to indicate that is private

* resolve merge issues from Merge of remote-tracking branch 'upstream/master'

* tuned whitespace in api.mustache and re-ran spring-all-petstore.sh

* removed special spring cloud library check as it was no longer being referenced in api.mustache
re-ran spring-all-petstore.sh
This commit is contained in:
David Noel 2017-12-18 09:43:15 -05:00 committed by William Cheng
parent cccef5dbc3
commit ad7a8200f0
2 changed files with 20 additions and 6 deletions

View File

@ -39,6 +39,7 @@ public class SpringCodegen extends AbstractJavaCodegen
protected String basePackage = "io.swagger"; protected String basePackage = "io.swagger";
protected boolean interfaceOnly = false; protected boolean interfaceOnly = false;
protected boolean delegatePattern = false; protected boolean delegatePattern = false;
protected boolean delegateMethod = false;
protected boolean singleContentTypes = false; protected boolean singleContentTypes = false;
protected boolean java8 = false; protected boolean java8 = false;
protected boolean async = false; protected boolean async = false;
@ -206,8 +207,14 @@ public class SpringCodegen extends AbstractJavaCodegen
} }
if (this.interfaceOnly && this.delegatePattern) { if (this.interfaceOnly && this.delegatePattern) {
throw new IllegalArgumentException( if (this.java8) {
String.format("Can not generate code with `%s` and `%s` both true.", DELEGATE_PATTERN, INTERFACE_ONLY)); this.delegateMethod = true;
additionalProperties.put("delegate-method", true);
} else {
throw new IllegalArgumentException(
String.format("Can not generate code with `%s` and `%s` true while `%s` is false.",
DELEGATE_PATTERN, INTERFACE_ONLY, JAVA_8));
}
} }
if (!this.interfaceOnly) { if (!this.interfaceOnly) {
@ -273,12 +280,12 @@ public class SpringCodegen extends AbstractJavaCodegen
} }
} }
if (!this.delegatePattern && this.java8) { if ((!this.delegatePattern && this.java8) || this.delegateMethod) {
additionalProperties.put("jdk8-no-delegate", true); additionalProperties.put("jdk8-no-delegate", true);
} }
if (this.delegatePattern) { if (this.delegatePattern && !this.delegateMethod) {
additionalProperties.put("isDelegate", "true"); additionalProperties.put("isDelegate", "true");
apiTemplateFiles.put("apiDelegate.mustache", "Delegate.java"); apiTemplateFiles.put("apiDelegate.mustache", "Delegate.java");
} }

View File

@ -100,7 +100,14 @@ public interface {{classname}} {
produces = { {{#produces}}"{{{mediaType}}}"{{#hasMore}}, {{/hasMore}}{{/produces}} }, {{/hasProduces}}{{#hasConsumes}} produces = { {{#produces}}"{{{mediaType}}}"{{#hasMore}}, {{/hasMore}}{{/produces}} }, {{/hasProduces}}{{#hasConsumes}}
consumes = { {{#consumes}}"{{{mediaType}}}"{{#hasMore}}, {{/hasMore}}{{/consumes}} },{{/hasConsumes}}{{/singleContentTypes}} consumes = { {{#consumes}}"{{{mediaType}}}"{{#hasMore}}, {{/hasMore}}{{/consumes}} },{{/hasConsumes}}{{/singleContentTypes}}
method = RequestMethod.{{httpMethod}}) method = RequestMethod.{{httpMethod}})
{{#jdk8}}default {{/jdk8}}{{#responseWrapper}}{{.}}<{{/responseWrapper}}ResponseEntity<{{>returnTypes}}>{{#responseWrapper}}>{{/responseWrapper}} {{operationId}}({{#allParams}}{{>queryParams}}{{>pathParams}}{{>headerParams}}{{>bodyParams}}{{>formParams}}{{#hasMore}},{{/hasMore}}{{/allParams}}){{^jdk8}};{{/jdk8}}{{#jdk8}} { {{#jdk8}}default {{/jdk8}}{{#responseWrapper}}{{.}}<{{/responseWrapper}}ResponseEntity<{{>returnTypes}}>{{#responseWrapper}}>{{/responseWrapper}} {{#delegate-method}}_{{/delegate-method}}{{operationId}}({{#allParams}}{{>queryParams}}{{>pathParams}}{{>headerParams}}{{>bodyParams}}{{>formParams}}{{#hasMore}},{{/hasMore}}{{/allParams}}){{^jdk8}};{{/jdk8}}{{#jdk8}} {
{{#delegate-method}}
return {{operationId}}({{#allParams}}{{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}});
}
// Override this method
default {{#responseWrapper}}{{.}}<{{/responseWrapper}}ResponseEntity<{{>returnTypes}}>{{#responseWrapper}}>{{/responseWrapper}} {{operationId}}({{#allParams}}{{^isFile}}{{{dataType}}}{{/isFile}}{{#isFile}}MultipartFile{{/isFile}} {{paramName}}{{#hasMore}},{{/hasMore}}{{/allParams}}) {
{{/delegate-method}}
{{^isDelegate}} {{^isDelegate}}
if(getObjectMapper().isPresent() && getAcceptHeader().isPresent()) { if(getObjectMapper().isPresent() && getAcceptHeader().isPresent()) {
{{#examples}} {{#examples}}
@ -125,4 +132,4 @@ public interface {{classname}} {
{{/operation}} {{/operation}}
} }
{{/operations}} {{/operations}}