Skip to content

[REQ] Possibilty of annoted type arguments with bean Validation for Java Collections #23705

@juniorjrjl

Description

@juniorjrjl

I need to annoted a type argument to apply bean validation for each Collection elements ( List, Set)

// constraint violation when some element is null
  @Valid
  private List<@jakarta.validation.constraints.NotNull Stubb> sample= new ArrayList<>();

but a property x-field-extra-annotation only mark a property. ex.:

// constraint violation when my list is null
  @Valid
  @jakarta.validation.constraints.NotNull
  private List<Stubb> sample = new ArrayList<>();

for solve a problem I think about create a new one ( ex.: x-inner-validation) for use like this:

        sample:
          type: array
          items:
            x-inner-validation: '@jakarta.validation.constraints.NotNull'
            allOf:
              - $ref: '#/components/schemas/Stubb'

I try to edit a pojo.mustache ( JavaSpring/Pojo.mustache) follow my attempt:

property:

{{#isContainer}}
  {{#useBeanValidation}}@Valid{{/useBeanValidation}}
  {{#openApiNullable}}
  private {{>nullableAnnotation}}{{#isNullable}}{{>nullableDataTypeBeanValidation}} {{name}} = JsonNullable.<{{{items.vendorExtensions.x-inner-validation}}}{{{datatypeWithEnum}}}>undefined();{{/isNullable}}{{^required}}{{^isNullable}}{{>nullableDataTypeBeanValidation}} {{name}}{{#defaultValue}} = {{{.}}}{{/defaultValue}};{{/isNullable}}{{/required}}{{#required}}{{^isNullable}}{{>nullableDataTypeBeanValidation}} {{name}}{{#defaultValue}} = {{{.}}}{{/defaultValue}};{{/isNullable}}{{/required}}
  {{/openApiNullable}}
  {{^openApiNullable}}
  private {{>nullableAnnotation}}{{#isSet}}Set{{/isSet}}{{^isSet}}List{{/isSet}}<{{{items.vendorExtensions.x-inner-validation}}} {{{items.datatypeWithEnum}}}> {{name}}{{#defaultValue}} = {{{.}}}{{/defaultValue}}{{^defaultValue}} = new {{#isSet}}LinkedHashSet{{/isSet}}{{^isSet}}ArrayList{{/isSet}}<>(){{/defaultValue}};
  {{/openApiNullable}}
  {{/isContainer}}
  {{^isContainer}}

getter:

  public {{>nullableAnnotation}}{{#isContainer}}{{#isSet}}Set{{/isSet}}{{^isSet}}List{{/isSet}}<{{{items.vendorExtensions.x-inner-validation}}} {{{items.datatypeWithEnum}}}>{{/isContainer}}{{^isContainer}}{{>nullableDataTypeBeanValidation}}{{/isContainer}} {{getter}}() {
  return {{name}};

setter

{{#jackson}}{{^vendorExtensions.x-is-jackson-optional-nullable}}{{>jackson_annotations}}{{/vendorExtensions.x-is-jackson-optional-nullable}}{{/jackson}}
  public void {{setter}}({{>nullableAnnotation}}{{#isContainer}}{{#isSet}}Set{{/isSet}}{{^isSet}}List{{/isSet}}<{{{items.vendorExtensions.x-inner-validation}}} {{{items.datatypeWithEnum}}}>{{/isContainer}}{{^isContainer}}{{>nullableDataType}}{{/isContainer}} {{name}}) {
  this.{{name}} = {{name}};

this config is breaking when I try to use a Set instead of List, but I paste here to try to help a develop a new config. Thank you

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions