Files
openapi-generator/docs/generators/kotlin-spring.md
Jachym Metlicka 3c092b4c30 [KOTLIN;SPRING] - add support for 'x-spring-paginated' to get closer to feature parity with java-spring codegen; add 'autoXSpringPaginated' option; support x-operation-extra-annotation (#22958)
* add x-kotlin-implements

* implement tests

* update samples

* fix tests - forbidden api issue

* add samples

* add samples. use Pageable only for server-side

* add support for auto-detecting x-spring-paginated in Spring Boot operations

* fix maven dependencies import

* add unit tests

* add support for vendor extension

* remove files

* fix samples

* fix docs

* implement suggestions from CR. Fix declarative interface naming.

* move import around

* add x-operation-extra-annotation

* make sure the PageableAsQueryParam does not remove already present x-operation-extra-annotation content

* support also list format

* regenerate samples and docs

* regenerate samples and docs

* force tests rerun

* remove files

* add files

* trigger test rerun
2026-02-14 00:17:00 +08:00

16 KiB

title
title
Documentation for the kotlin-spring Generator

METADATA

Property Value Notes
generator name kotlin-spring pass this to the generate command after -g
generator stability STABLE
generator type SERVER
generator language Kotlin
generator default templating engine mustache
helpTxt Generates a Kotlin Spring application.

CONFIG OPTIONS

These options may be applied as additional-properties (cli) or configOptions (plugins). Refer to configuration docs for more details.

Option Description Values Default
additionalModelTypeAnnotations Additional annotations for model type(class level annotations). List separated by semicolon(;) or new line (Linux or Windows) null
annotationLibrary Select the complementary documentation annotation library.
none
Do not annotate Model and Api with complementary annotations.
swagger1
Annotate Model and Api using the Swagger Annotations 1.x library.
swagger2
Annotate Model and Api using the Swagger Annotations 2.x library.
swagger2
apiPackage api package for generated code org.openapitools.api
apiSuffix suffix for api classes Api
artifactId Generated artifact id (name of jar). openapi-spring
artifactVersion Generated artifact's package version. 1.0.0
autoXSpringPaginated Automatically add x-spring-paginated to operations that have 'page', 'size', and 'sort' query parameters. When enabled, operations with all three parameters will have Pageable support automatically applied. Operations with x-spring-paginated explicitly set to false will not be auto-detected. false
basePackage base package (invokerPackage) for generated code org.openapitools
beanQualifiers Whether to add fully-qualifier class names as bean qualifiers in @Component and @RestController annotations. May be used to prevent bean names clash if multiple generated libraries (contexts) added to single project. false
configPackage configuration package for generated code org.openapitools.configuration
declarativeInterfaceReactiveMode What type of reactive style to use in Spring Http declarative interface
coroutines
Use kotlin-idiomatic 'suspend' functions
reactor
Use reactor return wrappers 'Mono' and 'Flux'
coroutines
delegatePattern Whether to generate the server files using the delegate pattern false
documentationProvider Select the OpenAPI documentation provider.
none
Do not publish an OpenAPI specification.
source
Publish the original input OpenAPI specification.
springfox
Generate an OpenAPI 2 (fka Swagger RESTful API Documentation Specification) specification using SpringFox 2.x. Deprecated (for removal); use springdoc instead.
springdoc
Generate an OpenAPI 3 specification using SpringDoc.
springdoc
enumPropertyNaming Naming convention for enum properties: 'camelCase', 'PascalCase', 'snake_case', 'UPPERCASE', and 'original' original
exceptionHandler generate default global exception handlers (not compatible with reactive. enabling reactive will disable exceptionHandler ) true
gradleBuildFile generate a gradle build file using the Kotlin DSL true
groupId Generated artifact package's organization (i.e. maven groupId). org.openapitools
includeHttpRequestContext Whether to include HttpServletRequest (blocking) or ServerWebExchange (reactive) as additional parameter in generated methods. false
interfaceOnly Whether to generate only API interface stubs without the server files. false
library library template (sub-template)
spring-boot
Spring-boot Server application.
spring-cloud
Spring-Cloud-Feign client with Spring-Boot auto-configured settings.
spring-declarative-http-interface
Spring Declarative Interface client
spring-boot
modelMutable Create mutable models false
modelPackage model package for generated code org.openapitools.model
packageName Generated artifact package name. org.openapitools
parcelizeModels toggle "@Parcelize" for generated models null
reactive use coroutines for reactive behavior false
requestMappingMode Where to generate the class level @RequestMapping annotation.
api_interface
Generate the @RequestMapping annotation on the generated Api Interface.
controller
Generate the @RequestMapping annotation on the generated Api Controller Implementation.
none
Do not add a class level @RequestMapping annotation.
controller
schemaImplements A map of single interface or a list of interfaces per schema name that should be implemented (serves similar purpose as x-kotlin-implements, but is fully decoupled from the api spec). Example: yaml schemaImplements: {Pet: com.some.pack.WithId, Category: [com.some.pack.CategoryInterface], Dog: [com.some.pack.Canine, com.some.pack.OtherInterface]} implements interfaces in schemas Pet (interface com.some.pack.WithId), Category (interface com.some.pack.CategoryInterface), Dog(interfaces com.some.pack.Canine, com.some.pack.OtherInterface) empty map
schemaImplementsFields A map of single field or a list of fields per schema name that should be prepended with override (serves similar purpose as x-kotlin-implements-fields, but is fully decoupled from the api spec). Example: yaml schemaImplementsFields: {Pet: id, Category: [name, id], Dog: [bark, breed]} marks fields to be prepended with override in schemas Pet (field id), Category (fields name, id) and Dog (fields bark, breed) empty map
serializableModel boolean - toggle "implements Serializable" for generated models null
serverPort configuration the port in which the sever is to run on 8080
serviceImplementation generate stub service implementations that extends service interfaces. If this is set to true service interfaces will also be generated false
serviceInterface generate service interfaces to go alongside controllers. In most cases this option would be used to update an existing project, so not to override implementations. Useful to help facilitate the generation gap pattern false
skipDefaultInterface Whether to skip generation of default implementations for interfaces (Api interfaces or Delegate interfaces depending on the delegatePattern option) false
sortModelPropertiesByRequiredFlag Sort model properties to place required parameters before optional parameters. null
sortParamsByRequiredFlag Sort method arguments to place required parameters before optional parameters. null
sourceFolder source folder for generated code src/main/kotlin
title server title name or client service name OpenAPI Kotlin Spring
useBeanValidation Use BeanValidation API annotations to validate data types true
useFeignClientUrl Whether to generate Feign client with url parameter. true
useFlowForArrayReturnType Whether to use Flow for array/collection return types when reactive is enabled. If false, will use List instead. true
useResponseEntity Whether (when false) to return actual type (e.g. List<Fruit>) and handle non-happy path responses via exceptions flow or (when true) return entire ResponseEntity (e.g. ResponseEntity<List<Fruit>>). If disabled, method are annotated using a @ResponseStatus annotation, which has the status of the first response declared in the Api definition true
useSpringBoot3 Generate code and provide dependencies for use with Spring Boot ≥ 3 (use jakarta instead of javax in imports). Enabling this option will also enable useJakartaEe. false
useSwaggerUI Open the OpenApi specification in swagger-ui. Will also import and configure needed dependencies true
useTags Whether to use tags for creating interface and controller class names false
xKotlinImplementsFieldsSkip A list of fields per schema name that should NOT be created with override keyword despite their presence in vendor extension x-kotlin-implements-fields for the schema. Example: yaml xKotlinImplementsFieldsSkip: Pet: [photoUrls] skips override for photoUrls in schema Pet empty map
xKotlinImplementsSkip A list of fully qualified interfaces that should NOT be implemented despite their presence in vendor extension x-kotlin-implements. Example: yaml xKotlinImplementsSkip: [com.some.pack.WithPhotoUrls] skips implementing the interface in any schema empty list

SUPPORTED VENDOR EXTENSIONS

Extension name Description Applicable for Default value
x-accepts Specify custom value for 'Accept' header for operation OPERATION null
x-class-extra-annotation List of custom annotations to be added to model MODEL null
x-content-type Specify custom value for 'Content-Type' header for operation OPERATION null
x-discriminator-value Used with model inheritance to specify value for discriminator that identifies current model MODEL
x-field-extra-annotation List of custom annotations to be added to property FIELD, OPERATION_PARAMETER null
x-operation-extra-annotation List of custom annotations to be added to operation OPERATION null
x-pattern-message Add this property whenever you need to customize the invalidation error message for the regex pattern of a variable FIELD, OPERATION_PARAMETER null
x-size-message Add this property whenever you need to customize the invalidation error message for the size or length of a variable FIELD, OPERATION_PARAMETER null
x-minimum-message Add this property whenever you need to customize the invalidation error message for the minimum value of a variable FIELD, OPERATION_PARAMETER null
x-maximum-message Add this property whenever you need to customize the invalidation error message for the maximum value of a variable FIELD, OPERATION_PARAMETER null
x-kotlin-implements Ability to specify interfaces that model must implement MODEL empty array
x-kotlin-implements-fields Specify attributes that are implemented by the interface(s) added via x-kotlin-implements MODEL empty array
x-spring-paginated Add org.springframework.data.domain.Pageable to controller method. Can be used to handle page, size and sort query parameters. If these query parameters are also specified in the operation spec, they will be removed from the controller method as their values can be obtained from the Pageable object. OPERATION false

IMPORT MAPPING

Type/Alias Imports
BigDecimal java.math.BigDecimal
Date java.time.LocalDate
DateTime java.time.OffsetDateTime
File java.io.File
LocalDate java.time.LocalDate
LocalDateTime java.time.LocalDateTime
LocalTime java.time.LocalTime
Timestamp java.sql.Timestamp
URI java.net.URI
UUID java.util.UUID

INSTANTIATION TYPES

Type/Alias Instantiated By
array kotlin.collections.ArrayList
list kotlin.collections.ArrayList
map kotlin.collections.HashMap

LANGUAGE PRIMITIVES

  • kotlin.Array
  • kotlin.Boolean
  • kotlin.Byte
  • kotlin.ByteArray
  • kotlin.Char
  • kotlin.Double
  • kotlin.Float
  • kotlin.Int
  • kotlin.Long
  • kotlin.Short
  • kotlin.String
  • kotlin.collections.List
  • kotlin.collections.Map
  • kotlin.collections.MutableList
  • kotlin.collections.MutableMap
  • kotlin.collections.MutableSet
  • kotlin.collections.Set

RESERVED WORDS

  • ApiClient
  • ApiException
  • ApiResponse
  • abstract
  • actual
  • annotation
  • as
  • break
  • class
  • companion
  • const
  • constructor
  • continue
  • contract
  • crossinline
  • data
  • delegate
  • do
  • dynamic
  • else
  • enum
  • expect
  • external
  • false
  • field
  • final
  • finally
  • for
  • fun
  • if
  • import
  • in
  • infix
  • init
  • inline
  • inner
  • interface
  • internal
  • is
  • it
  • lateinit
  • noinline
  • null
  • object
  • open
  • operator
  • out
  • override
  • package
  • param
  • private
  • property
  • protected
  • public
  • receiver
  • reified
  • return
  • sealed
  • setparam
  • super
  • suspend
  • tailrec
  • this
  • throw
  • true
  • try
  • typealias
  • typeof
  • val
  • value
  • var
  • vararg
  • when
  • where
  • while

FEATURE SET

Client Modification Feature

Name Supported Defined By
BasePath ToolingExtension
Authorizations ToolingExtension
UserAgent ToolingExtension
MockServer ToolingExtension

Data Type Feature

Name Supported Defined By
Custom OAS2,OAS3
Int32 OAS2,OAS3
Int64 OAS2,OAS3
Float OAS2,OAS3
Double OAS2,OAS3
Decimal ToolingExtension
String OAS2,OAS3
Byte OAS2,OAS3
Binary OAS2,OAS3
Boolean OAS2,OAS3
Date OAS2,OAS3
DateTime OAS2,OAS3
Password OAS2,OAS3
File OAS2
Uuid
Array OAS2,OAS3
Null OAS3
AnyType OAS2,OAS3
Object OAS2,OAS3
Maps ToolingExtension
CollectionFormat OAS2
CollectionFormatMulti OAS2
Enum OAS2,OAS3
ArrayOfEnum ToolingExtension
ArrayOfModel ToolingExtension
ArrayOfCollectionOfPrimitives ToolingExtension
ArrayOfCollectionOfModel ToolingExtension
ArrayOfCollectionOfEnum ToolingExtension
MapOfEnum ToolingExtension
MapOfModel ToolingExtension
MapOfCollectionOfPrimitives ToolingExtension
MapOfCollectionOfModel ToolingExtension
MapOfCollectionOfEnum ToolingExtension

Documentation Feature

Name Supported Defined By
Readme ToolingExtension
Model ToolingExtension
Api ToolingExtension

Global Feature

Name Supported Defined By
Host OAS2,OAS3
BasePath OAS2,OAS3
Info OAS2,OAS3
Schemes OAS2,OAS3
PartialSchemes OAS2,OAS3
Consumes OAS2
Produces OAS2
ExternalDocumentation OAS2,OAS3
Examples OAS2,OAS3
XMLStructureDefinitions OAS2,OAS3
MultiServer OAS3
ParameterizedServer OAS3
ParameterStyling OAS3
Callbacks OAS3
LinkObjects OAS3

Parameter Feature

Name Supported Defined By
Path OAS2,OAS3
Query OAS2,OAS3
Header OAS2,OAS3
Body OAS2
FormUnencoded OAS2
FormMultipart OAS2
Cookie OAS3

Schema Support Feature

Name Supported Defined By
Simple OAS2,OAS3
Composite OAS2,OAS3
Polymorphism OAS2,OAS3
Union OAS3
allOf OAS2,OAS3
anyOf OAS3
oneOf OAS3
not OAS3

Security Feature

Name Supported Defined By
BasicAuth OAS2,OAS3
ApiKey OAS2,OAS3
OpenIDConnect OAS3
BearerToken OAS3
OAuth2_Implicit OAS2,OAS3
OAuth2_Password OAS2,OAS3
OAuth2_ClientCredentials OAS2,OAS3
OAuth2_AuthorizationCode OAS2,OAS3
SignatureAuth OAS3
AWSV4Signature ToolingExtension

Wire Format Feature

Name Supported Defined By
JSON OAS2,OAS3
XML OAS2,OAS3
PROTOBUF ToolingExtension
Custom OAS2,OAS3