Skip to content

Commit 24f5adf

Browse files
feat: support type-level validation for collections via x-not-null extension in spring generator (#1219)
1 parent 7623902 commit 24f5adf

File tree

7 files changed

+56
-4
lines changed

7 files changed

+56
-4
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ BOAT is still under development and subject to change.
1818

1919
## 0.17.75
2020
* Fixed duplicate serialization of the discriminator property in Jackson-based Java models by removing allowGetters = true from the @JsonIgnoreProperties annotation.
21+
* In Spring generator added support for type-level validation in collections via the `x-not-null` vendor extension to allow `@NotNull` annotations on generic type arguments.
2122

2223
## 0.17.74
2324
* Swift5: Removed deprecated initializer from model objects. The initializer is now internal and only accessible through the Builder pattern, preventing breaking code from deprecation warnings.

boat-scaffold/src/main/templates/boat-spring/beanValidationCore.mustache

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
{{#vendorExtensions.x-not-null}}@NotNull{{/vendorExtensions.x-not-null}}
12
{{#pattern}}{{^isByteArray}}@Pattern(regexp = "{{{pattern}}}") {{/isByteArray}}{{/pattern}}{{!
23
minLength && maxLength set
34
}}{{#minLength}}{{#maxLength}}@Size(min = {{minLength}}, max = {{maxLength}}) {{/maxLength}}{{/minLength}}{{!

boat-scaffold/src/test/java/com/backbase/oss/codegen/java/BoatSpringTemplatesTests.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -192,13 +192,25 @@ void generate(Combination param) {
192192
@Check
193193
void useBeanValidation() {
194194
assertThat(findPattern("/api/.+\\.java$", "@Valid"),
195-
equalTo(this.param.useBeanValidation||this.param.addBindingResult));
195+
equalTo(this.param.useBeanValidation || this.param.addBindingResult));
196196
assertThat(findPattern("/model/.+\\.java$", "@Valid"),
197-
equalTo(this.param.useBeanValidation||this.param.addBindingResult));
197+
equalTo(this.param.useBeanValidation || this.param.addBindingResult));
198198
assertThat(findPattern("/model/MultiLinePaymentRequest.*\\.java$", "List<@Pattern\\(regexp"),
199-
equalTo(this.param.useBeanValidation||this.param.addBindingResult));
199+
equalTo(this.param.useBeanValidation || this.param.addBindingResult));
200200
assertThat(findPattern("/model/MultiLinePaymentRequest.*\\.java$", "Map<String, @Size\\(min = 7, max = 10\\)"),
201-
equalTo(this.param.useBeanValidation||this.param.addBindingResult));
201+
equalTo(this.param.useBeanValidation || this.param.addBindingResult));
202+
}
203+
204+
@Check
205+
void queryParamsCustomNotNullValidation() {
206+
assertThat(findPattern("/api/ArrayTypesApi\\.java$", "List<@NotNull.*>\\s+qParamsNotNull"),
207+
equalTo(this.param.useBeanValidation || this.param.addBindingResult));
208+
assertThat(findPattern("/api/SetTypesApi\\.java$", "Set\\s*<@NotNull.*>\\s+qParamsNotNull"),
209+
equalTo(this.param.useBeanValidation || this.param.addBindingResult));
210+
assertThat(findPattern("/api/SimpleTypesApi\\.java$", "Set\\s*<@NotNull.*>\\s+qParamsNotNull"),
211+
equalTo(this.param.useBeanValidation || this.param.addBindingResult));
212+
assertThat(findPattern("/api/MapTypesApi\\.java$", "List<@NotNull.*>\\s+qParamsNotNull"),
213+
equalTo(this.param.useBeanValidation || this.param.addBindingResult));
202214
}
203215

204216
@Check

boat-scaffold/src/test/resources/boat-spring/paths/array-types.yaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,15 @@ get:
8686
minLength: 1
8787
maxLength: 36
8888
pattern: '^[A-Z]+$'
89+
- name: q-params-not-null
90+
in: query
91+
required: false
92+
schema:
93+
type: array
94+
items:
95+
type: string
96+
x-not-null: true
97+
pattern: '^[A-Z]+$'
8998
- name: q-params-set
9099
in: query
91100
required: false

boat-scaffold/src/test/resources/boat-spring/paths/map-types.yaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,15 @@ get:
8686
minLength: 1
8787
maxLength: 36
8888
pattern: '^[A-Z]+$'
89+
- name: q-params-not-null
90+
in: query
91+
required: false
92+
schema:
93+
type: array
94+
items:
95+
type: string
96+
x-not-null: true
97+
pattern: '^[A-Z]+$'
8998
- name: q-params-set
9099
in: query
91100
required: false

boat-scaffold/src/test/resources/boat-spring/paths/set-types.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,16 @@ get:
9797
minLength: 1
9898
maxLength: 36
9999
pattern: '^[A-Z]+$'
100+
- name: q-params-not-null
101+
in: query
102+
required: false
103+
schema:
104+
type: array
105+
uniqueItems: true
106+
items:
107+
type: string
108+
x-not-null: true
109+
pattern: '^[A-Z]+$'
100110
- name: q-params-set-req
101111
in: query
102112
required: true

boat-scaffold/src/test/resources/boat-spring/paths/simple-types.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,16 @@ get:
8686
minLength: 1
8787
maxLength: 36
8888
pattern: '^[A-Z]+$'
89+
- name: q-params-not-null
90+
in: query
91+
required: false
92+
schema:
93+
type: array
94+
uniqueItems: true
95+
items:
96+
type: string
97+
x-not-null: true
98+
pattern: '^[A-Z]+$'
8999
- name: q-params-set
90100
in: query
91101
required: false

0 commit comments

Comments
 (0)