From ecc531902af14f593e09795ca72eca401a21e08e Mon Sep 17 00:00:00 2001 From: Leandro Aparecido <lehphyro@gmail.com> Date: Fri, 25 Oct 2019 11:25:18 +0200 Subject: [PATCH 1/2] Add useClassLevelBeanValidation flag for Spring server generator --- .../codegen/languages/SpringCodegen.java | 12 ++++++++++++ .../src/main/resources/JavaSpring/api.mustache | 2 ++ 2 files changed, 14 insertions(+) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java index 4daf182d0f9..c3df6279883 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java @@ -56,6 +56,7 @@ public class SpringCodegen extends AbstractJavaCodegen public static final String SINGLE_CONTENT_TYPES = "singleContentTypes"; public static final String VIRTUAL_SERVICE = "virtualService"; public static final String SKIP_DEFAULT_INTERFACE = "skipDefaultInterface"; + public static final String USE_CLASS_LEVEL_BEANVALIDATION = "useClassLevelBeanValidation"; public static final String JAVA_8 = "java8"; public static final String ASYNC = "async"; @@ -89,6 +90,7 @@ public class SpringCodegen extends AbstractJavaCodegen protected boolean skipDefaultInterface = false; protected boolean useTags = false; protected boolean useBeanValidation = true; + protected boolean useClassLevelBeanValidation = true; protected boolean performBeanValidation = false; protected boolean implicitHeaders = false; protected boolean openapiDocketConfig = false; @@ -163,6 +165,7 @@ public class SpringCodegen extends AbstractJavaCodegen cliOptions.add(CliOption.newBoolean(VIRTUAL_SERVICE, "Generates the virtual service. For more details refer - https://github.com/elan-venture/virtualan/wiki")); cliOptions.add(CliOption.newBoolean(USE_TAGS, "use tags for creating interface and controller classnames", useTags)); cliOptions.add(CliOption.newBoolean(USE_BEANVALIDATION, "Use BeanValidation API annotations", useBeanValidation)); + cliOptions.add(CliOption.newBoolean(USE_CLASS_LEVEL_BEANVALIDATION, "Add @Validated to class-level Api interfaces", useClassLevelBeanValidation)); cliOptions.add(CliOption.newBoolean(PERFORM_BEANVALIDATION, "Use Bean Validation Impl. to perform BeanValidation", performBeanValidation)); cliOptions.add(CliOption.newBoolean(IMPLICIT_HEADERS, "Skip header parameters in the generated API methods using @ApiImplicitParams annotation.", implicitHeaders)); cliOptions.add(CliOption.newBoolean(OPENAPI_DOCKET_CONFIG, "Generate Spring OpenAPI Docket configuration class.", openapiDocketConfig)); @@ -302,6 +305,11 @@ public class SpringCodegen extends AbstractJavaCodegen } writePropertyBack(USE_BEANVALIDATION, useBeanValidation); + if (additionalProperties.containsKey(USE_CLASS_LEVEL_BEANVALIDATION)) { + this.setUseClassLevelBeanValidation(convertPropertyToBoolean(USE_CLASS_LEVEL_BEANVALIDATION)); + } + writePropertyBack(USE_CLASS_LEVEL_BEANVALIDATION, useClassLevelBeanValidation); + if (additionalProperties.containsKey(PERFORM_BEANVALIDATION)) { this.setPerformBeanValidation(convertPropertyToBoolean(PERFORM_BEANVALIDATION)); } @@ -869,6 +877,10 @@ public class SpringCodegen extends AbstractJavaCodegen this.useBeanValidation = useBeanValidation; } + public void setUseClassLevelBeanValidation(boolean useClassLevelBeanValidation) { + this.useClassLevelBeanValidation = useClassLevelBeanValidation; + } + public void setPerformBeanValidation(boolean performBeanValidation) { this.performBeanValidation = performBeanValidation; } diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/api.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/api.mustache index a5457e2a9c1..10d776b7da3 100644 --- a/modules/openapi-generator/src/main/resources/JavaSpring/api.mustache +++ b/modules/openapi-generator/src/main/resources/JavaSpring/api.mustache @@ -59,7 +59,9 @@ import java.util.concurrent.{{^jdk8}}Callable{{/jdk8}}{{#jdk8}}CompletableFuture {{/async}} {{>generatedAnnotation}} {{#useBeanValidation}} +{{#useClassLevelBeanValidation}} @Validated +{{/useClassLevelBeanValidation}} {{/useBeanValidation}} @Api(value = "{{{baseName}}}", description = "the {{{baseName}}} API") {{#operations}} -- GitLab From c8b213391a4c9c3c81123eb21ec824eb6cff64c2 Mon Sep 17 00:00:00 2001 From: Leandro Aparecido <leandro@backbase.com> Date: Wed, 29 Apr 2020 22:36:05 +0200 Subject: [PATCH 2/2] Update spring generator documentation --- docs/generators/spring.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/generators/spring.md b/docs/generators/spring.md index 93159837dd4..0f9d7e581af 100644 --- a/docs/generators/spring.md +++ b/docs/generators/spring.md @@ -62,6 +62,7 @@ sidebar_label: spring |title|server title name or client service name| |OpenAPI Spring| |unhandledException|Declare operation methods to throw a generic exception and allow unhandled exceptions (useful for Spring `@ControllerAdvice` directives).| |false| |useBeanValidation|Use BeanValidation API annotations| |true| +|useClassLevelBeanValidation|Add @Validated to class-level Api interfaces| |true| |useOptional|Use Optional container for optional parameters| |false| |useTags|use tags for creating interface and controller classnames| |false| |virtualService|Generates the virtual service. For more details refer - https://github.com/elan-venture/virtualan/wiki| |false| -- GitLab