Skip to content

Commit 13ab653

Browse files
committed
Adds (optional) validation to the beans.
Option to set: `useBeanValidation` to `true`. This will insert validation rules from the `jakarta.validation` package much like it does with the spring generator. Aso sneaked in `JsonProperty` annotations in order to more formally adhere to the name in the spec as opposed to configuring ObjectMappers in order to translate names to match the spec.
1 parent 80ecb27 commit 13ab653

10 files changed

Lines changed: 112 additions & 0 deletions
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{{#isContainer}}{{^isPrimitiveType}}{{^isEnum}}
2+
@field:jakarta.validation.Valid{{/isEnum}}{{/isPrimitiveType}}{{/isContainer}}{{!
3+
}}{{^isContainer}}{{^isPrimitiveType}}{{^isNumber}}{{^isUuid}}{{^isDateTime}}
4+
@field:jakarta.validation.Valid{{/isDateTime}}{{/isUuid}}{{/isNumber}}{{/isPrimitiveType}}{{/isContainer}}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
{{!
2+
format: email
3+
}}{{#isEmail}}
4+
@field:jakarta.validation.constraints.Email{{/isEmail}}{{!
5+
pattern set
6+
}}{{#pattern}}
7+
@field:jakarta.validation.constraints.Pattern(regexp="{{{pattern}}}"{{#vendorExtensions.x-pattern-message}}, message="{{vendorExtensions.x-pattern-message}}"{{/vendorExtensions.x-pattern-message}}){{/pattern}}{{!
8+
minLength && maxLength set
9+
}}{{#minLength}}{{#maxLength}}
10+
@field:jakarta.validation.constraints.Size(min={{minLength}},max={{maxLength}}){{/maxLength}}{{/minLength}}{{!
11+
minLength set, maxLength not
12+
}}{{#minLength}}{{^maxLength}}
13+
@field:jakarta.validation.constraints.Size(min={{minLength}}){{/maxLength}}{{/minLength}}{{!
14+
minLength not set, maxLength set
15+
}}{{^minLength}}{{#maxLength}}
16+
@field:jakarta.validation.constraints.Size(max={{.}}){{/maxLength}}{{/minLength}}{{!
17+
@Size: minItems && maxItems set
18+
}}{{#minItems}}{{#maxItems}}
19+
@field:jakarta.validation.constraints.Size(min={{minItems}},max={{maxItems}}) {{/maxItems}}{{/minItems}}{{!
20+
@Size: minItems set, maxItems not
21+
}}{{#minItems}}{{^maxItems}}
22+
@field:jakarta.validation.constraints.Size(min={{minItems}}){{/maxItems}}{{/minItems}}{{!
23+
@Size: minItems not set && maxItems set
24+
}}{{^minItems}}{{#maxItems}}
25+
@field:jakarta.validation.constraints.Size(max={{.}}){{/maxItems}}{{/minItems}}{{!
26+
check for integer or long / all others=decimal type with @Decimal*
27+
isInteger set
28+
}}{{#isInteger}}{{#minimum}}
29+
@field:jakarta.validation.constraints.Min({{.}}){{/minimum}}{{#maximum}}
30+
@field:jakarta.validation.constraints.Max({{.}}){{/maximum}}{{/isInteger}}{{!
31+
isLong set
32+
}}{{#isLong}}{{#minimum}}
33+
@field:jakarta.validation.constraints.Min({{.}}L){{/minimum}}{{#maximum}}
34+
@field:jakarta.validation.constraints.Max({{.}}L){{/maximum}}{{/isLong}}{{!
35+
Not Integer, not Long => we have a decimal value!
36+
}}{{^isInteger}}{{^isLong}}{{#minimum}}
37+
@field:jakarta.validation.constraints.DecimalMin("{{.}}"){{/minimum}}{{#maximum}}
38+
@field:jakarta.validation.constraints.DecimalMax("{{.}}"){{/maximum}}{{/isLong}}{{/isInteger}}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{{#description}}
2+
/* {{{.}}} */
3+
{{/description}}
4+
{{#useBeanValidation}}{{>beanValidation}}{{>beanValidationModel}}{{/useBeanValidation}}
5+
@field:com.fasterxml.jackson.annotation.JsonProperty("{{{baseName}}}")
6+
{{>modelMutable}} {{{name}}}: {{#isEnum}}{{{classname}}}.{{{nameInPascalCase}}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}? = {{{defaultValue}}}{{^defaultValue}}null{{/defaultValue}}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{{#description}}
2+
/* {{{.}}} */
3+
{{/description}}
4+
{{#useBeanValidation}}{{>beanValidation}}{{>beanValidationModel}}{{/useBeanValidation}}
5+
@field:com.fasterxml.jackson.annotation.JsonProperty("{{{baseName}}}")
6+
{{>modelMutable}} {{{name}}}: {{#isEnum}}{{{classname}}}.{{{nameInPascalCase}}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{#isNullable}}?{{/isNullable}}{{#defaultValue}} = {{^isNumber}}{{{defaultValue}}}{{/isNumber}}{{#isNumber}}{{{dataType}}}("{{{defaultValue}}}"){{/isNumber}}{{/defaultValue}}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
{{#defaultValue}} ?:{{#isInteger}}{{{defaultValue}}}{{/isInteger}}{{#isLong}}{{{defaultValue}}}L{{/isLong}}{{#isShort}}{{{defaultValue}}}.toShort(){{/isShort}}{{#isDouble}}{{{defaultValue}}}.toDouble(){{/isDouble}}{{#isFloat}}{{{defaultValue}}}f{{/isFloat}}{{#isEnum}}{{{dataType}}}.valueOf("{{{defaultValue}}}"){{/isEnum}}{{#isBoolean}}{{{defaultValue}}}{{/isBoolean}}{{#isString}}"{{{defaultValue}}}"{{/isString}}{{#isUuid}}"UUID.fromString({{{defaultValue}}})"{{/isUuid}}{{#isUuid}}"UUID.fromString({{{defaultValue}}})"{{/isUuid}}
2+
{{/defaultValue}}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{{#isContainer}}{{^isPrimitiveType}}{{^isEnum}}
2+
@field:jakarta.validation.Valid{{/isEnum}}{{/isPrimitiveType}}{{/isContainer}}{{!
3+
}}{{^isContainer}}{{^isPrimitiveType}}{{^isNumber}}{{^isUuid}}{{^isDateTime}}
4+
@field:jakarta.validation.Valid{{/isDateTime}}{{/isUuid}}{{/isNumber}}{{/isPrimitiveType}}{{/isContainer}}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
{{!
2+
format: email
3+
}}{{#isEmail}}
4+
@field:jakarta.validation.constraints.Email{{/isEmail}}{{!
5+
pattern set
6+
}}{{#pattern}}
7+
@field:jakarta.validation.constraints.Pattern(regexp="{{{pattern}}}"{{#vendorExtensions.x-pattern-message}}, message="{{vendorExtensions.x-pattern-message}}"{{/vendorExtensions.x-pattern-message}}){{/pattern}}{{!
8+
minLength && maxLength set
9+
}}{{#minLength}}{{#maxLength}}
10+
@field:jakarta.validation.constraints.Size(min={{minLength}},max={{maxLength}}){{/maxLength}}{{/minLength}}{{!
11+
minLength set, maxLength not
12+
}}{{#minLength}}{{^maxLength}}
13+
@field:jakarta.validation.constraints.Size(min={{minLength}}){{/maxLength}}{{/minLength}}{{!
14+
minLength not set, maxLength set
15+
}}{{^minLength}}{{#maxLength}}
16+
@field:jakarta.validation.constraints.Size(max={{.}}){{/maxLength}}{{/minLength}}{{!
17+
@Size: minItems && maxItems set
18+
}}{{#minItems}}{{#maxItems}}
19+
@field:jakarta.validation.constraints.Size(min={{minItems}},max={{maxItems}}) {{/maxItems}}{{/minItems}}{{!
20+
@Size: minItems set, maxItems not
21+
}}{{#minItems}}{{^maxItems}}
22+
@field:jakarta.validation.constraints.Size(min={{minItems}}){{/maxItems}}{{/minItems}}{{!
23+
@Size: minItems not set && maxItems set
24+
}}{{^minItems}}{{#maxItems}}
25+
@field:jakarta.validation.constraints.Size(max={{.}}){{/maxItems}}{{/minItems}}{{!
26+
check for integer or long / all others=decimal type with @Decimal*
27+
isInteger set
28+
}}{{#isInteger}}{{#minimum}}
29+
@field:jakarta.validation.constraints.Min({{.}}){{/minimum}}{{#maximum}}
30+
@field:jakarta.validation.constraints.Max({{.}}){{/maximum}}{{/isInteger}}{{!
31+
isLong set
32+
}}{{#isLong}}{{#minimum}}
33+
@field:jakarta.validation.constraints.Min({{.}}L){{/minimum}}{{#maximum}}
34+
@field:jakarta.validation.constraints.Max({{.}}L){{/maximum}}{{/isLong}}{{!
35+
Not Integer, not Long => we have a decimal value!
36+
}}{{^isInteger}}{{^isLong}}{{#minimum}}
37+
@field:jakarta.validation.constraints.DecimalMin("{{.}}"){{/minimum}}{{#maximum}}
38+
@field:jakarta.validation.constraints.DecimalMax("{{.}}"){{/maximum}}{{/isLong}}{{/isInteger}}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{{#description}}
2+
/* {{{.}}} */
3+
{{/description}}
4+
{{#useBeanValidation}}{{>beanValidation}}{{>beanValidationModel}}{{/useBeanValidation}}
5+
@field:com.fasterxml.jackson.annotation.JsonProperty("{{{baseName}}}")
6+
{{>modelMutable}} {{{name}}}: {{#isEnum}}{{{classname}}}.{{{nameInPascalCase}}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}? = {{{defaultValue}}}{{^defaultValue}}null{{/defaultValue}}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{{#description}}
2+
/* {{{.}}} */
3+
{{/description}}
4+
{{#useBeanValidation}}{{>beanValidation}}{{>beanValidationModel}}{{/useBeanValidation}}
5+
@field:com.fasterxml.jackson.annotation.JsonProperty("{{{baseName}}}")
6+
{{>modelMutable}} {{{name}}}: {{#isEnum}}{{{classname}}}.{{{nameInPascalCase}}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{#isNullable}}?{{/isNullable}}{{#defaultValue}} = {{^isNumber}}{{{defaultValue}}}{{/isNumber}}{{#isNumber}}{{{dataType}}}("{{{defaultValue}}}"){{/isNumber}}{{/defaultValue}}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
{{#defaultValue}} ?:{{#isInteger}}{{{defaultValue}}}{{/isInteger}}{{#isLong}}{{{defaultValue}}}L{{/isLong}}{{#isShort}}{{{defaultValue}}}.toShort(){{/isShort}}{{#isDouble}}{{{defaultValue}}}.toDouble(){{/isDouble}}{{#isFloat}}{{{defaultValue}}}f{{/isFloat}}{{#isEnum}}{{{dataType}}}.valueOf("{{{defaultValue}}}"){{/isEnum}}{{#isBoolean}}{{{defaultValue}}}{{/isBoolean}}{{#isString}}"{{{defaultValue}}}"{{/isString}}{{#isUuid}}"UUID.fromString({{{defaultValue}}})"{{/isUuid}}{{#isUuid}}"UUID.fromString({{{defaultValue}}})"{{/isUuid}}
2+
{{/defaultValue}}

0 commit comments

Comments
 (0)