Skip to content

[BUG][KOTLIN] kotlin-spring generator does not add @Valid annotation to nested classes #8036

@dpolyakov987

Description

@dpolyakov987

#7846

Description

kotlin-spring generator does not add @Valid annotation to nested classes

openapi-generator version

5.0.0-beta3

OpenAPI declaration file content or url
openapi: 3.0.0
info:
  title: valid-bug API
  description: API valid-bug
  version: 1.0.0
servers:
  - url: /api/callback/
tags:
  - name: valid-bug
    description: Callback Controller
paths:
  /valid-bug:
    post:
      tags:
        - valid-bug
      summary: ''
      operationId: validBug
      requestBody:
        description: ''
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ValidBugDto'
        required: true
      responses:
        '200':
          description: OK
          content: {}
      deprecated: false

components:
  schemas:
    ValidBugDto:
      title: ValidBugDto
      type: object
      required:
        - date
        - object
      properties:
        string:
          type: string
        date:
          type: string
          format: date
        datetime:
          type: string
          format: date-time
        uuid:
          type: string
          format: uuid
        bigdecimal:
          type: number
        array:
          type: array
          items:
            $ref: '#/components/schemas/NestedDto'
        object:
          $ref: '#/components/schemas/NestedDto'

    NestedDto:
      title: NestedDto
      type: object
      properties:
        id:
          type: string
          format: uuid
Generation Details

maven plagin

<plugin>
                <groupId>org.openapitools</groupId>
                <artifactId>openapi-generator-maven-plugin</artifactId>
                <executions>
                   <execution>
                        <id>valid-bug-api</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <inputSpec>${project.basedir}/src/main/resources/openapi/valid-bug.yml</inputSpec>
                            <generateSupportingFiles>false</generateSupportingFiles>
                            <generatorName>kotlin-spring</generatorName>
                            <output>${project.build.directory}/generated-sources</output>
                            <apiPackage>test.api</apiPackage>
                            <modelPackage>test.model</modelPackage>
                            <configOptions>
                                <useTags>true</useTags>
                                <interfaceOnly>true</interfaceOnly>
                                <swaggerAnnotations>true</swaggerAnnotations>
                                <modelMutable>true</modelMutable>
                                <sourceFolder>src/main/kotlin</sourceFolder>
                                <enumPropertyNaming>UPPERCASE</enumPropertyNaming>
                            </configOptions>
                        </configuration>
                    </execution>
                  </executions>
            </plugin>
Expected output

ValidBugDto

package test.model

import java.util.Objects
import com.fasterxml.jackson.annotation.JsonProperty
import test.model.NestedDto
import javax.validation.constraints.DecimalMax
import javax.validation.constraints.DecimalMin
import javax.validation.constraints.Max
import javax.validation.constraints.Min
import javax.validation.constraints.NotNull
import javax.validation.constraints.Pattern
import javax.validation.constraints.Size
import javax.validation.Valid
import io.swagger.annotations.ApiModelProperty

/**
 * 
 * @param date 
 * @param &#x60;object&#x60; 
 * @param string 
 * @param datetime 
 * @param uuid 
 * @param bigdecimal 
 * @param array 
 */
data class ValidBugDto(

    @get:NotNull 
    @ApiModelProperty(example = "null", required = true, value = "")
    @field:JsonProperty("date") var date: java.time.LocalDate,

    @get:NotNull 
    @ApiModelProperty(example = "null", required = true, value = "")
    @field:JsonProperty("object") var `object`: NestedDto,

    @ApiModelProperty(example = "null", value = "")
    @field:JsonProperty("string") var string: kotlin.String? = null,

    @ApiModelProperty(example = "null", value = "")
    @field:JsonProperty("datetime") var datetime: java.time.OffsetDateTime? = null,

    @ApiModelProperty(example = "null", value = "")
    @field:JsonProperty("uuid") var uuid: java.util.UUID? = null,

    @ApiModelProperty(example = "null", value = "")
    @field:JsonProperty("bigdecimal") var bigdecimal: java.math.BigDecimal? = null,

    @ApiModelProperty(example = "null", value = "")
    @field:JsonProperty("array") var array: kotlin.collections.List<NestedDto>? = null
) {

}
Real output
package test.model

import java.util.Objects
import com.fasterxml.jackson.annotation.JsonProperty
import test.model.NestedDto
import javax.validation.constraints.DecimalMax
import javax.validation.constraints.DecimalMin
import javax.validation.constraints.Max
import javax.validation.constraints.Min
import javax.validation.constraints.NotNull
import javax.validation.constraints.Pattern
import javax.validation.constraints.Size
import io.swagger.annotations.ApiModelProperty

/**
 * 
 * @param date 
 * @param &#x60;object&#x60; 
 * @param string 
 * @param datetime 
 * @param uuid 
 * @param bigdecimal 
 * @param array 
 */
data class ValidBugDto(

    @get:NotNull 
    @ApiModelProperty(example = "null", required = true, value = "")
    @field:JsonProperty("date") var date: java.time.LocalDate,

    @get:NotNull 
    @ApiModelProperty(example = "null", required = true, value = "")
    @field:JsonProperty("object") var `object`: NestedDto,

    @ApiModelProperty(example = "null", value = "")
    @field:JsonProperty("string") var string: kotlin.String? = null,

    @ApiModelProperty(example = "null", value = "")
    @field:JsonProperty("datetime") var datetime: java.time.OffsetDateTime? = null,

    @ApiModelProperty(example = "null", value = "")
    @field:JsonProperty("uuid") var uuid: java.util.UUID? = null,

    @ApiModelProperty(example = "null", value = "")
    @field:JsonProperty("bigdecimal") var bigdecimal: java.math.BigDecimal? = null,

    @ApiModelProperty(example = "null", value = "")
    @field:JsonProperty("array") var array: kotlin.collections.List<NestedDto>? = null
) {

}
Related issues/PRs

[https://github.com//pull/8037]

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