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