Skip to content

Validation

Add OpenAPI schema validation constraints to properties using validation annotations. These annotations work in both OpenAPI and JSON Schema modes.

Number Validation

kotlin
@OpenApiNumberValidation(
    minimum = "0",
    maximum = "10000",
    exclusiveMaximum = "10000",
    multipleOf = "0.01"
)
val price: Double = 0.0

In OAS 3.1.0, exclusiveMinimum and exclusiveMaximum are standalone numeric values (not booleans). Use minimum for inclusive bounds and exclusiveMinimum/exclusiveMaximum when the bound itself should be excluded.

PropertyDescription
minimumMinimum value (inclusive)
maximumMaximum value (inclusive)
exclusiveMinimumExclusive minimum value (OAS 3.1.0 numeric)
exclusiveMaximumExclusive maximum value (OAS 3.1.0 numeric)
multipleOfMust be a multiple of this

String Validation

kotlin
@OpenApiStringValidation(
    minLength = "1",
    maxLength = "100",
    pattern = "^[a-zA-Z0-9_]+$"
)
val username: String = ""

@OpenApiStringValidation(format = "email")
val email: String = ""
PropertyDescription
minLengthMinimum string length
maxLengthMaximum string length
patternRegex pattern
formatString format (email, uri, ...)

Array Validation

kotlin
@OpenApiArrayValidation(
    minItems = "1",
    maxItems = "50",
    uniqueItems = true
)
val tags: List<String> = emptyList()
PropertyDescription
minItemsMinimum number of items
maxItemsMaximum number of items
uniqueItemsAll items must be unique

Object Validation

kotlin
@OpenApiObjectValidation(
    minProperties = "1",
    maxProperties = "20"
)
val settings: Map<String, String> = emptyMap()
PropertyDescription
minPropertiesMin properties
maxPropertiesMax properties

Combining Annotations

Validation annotations combine with other property annotations:

kotlin
@OpenApiStringValidation(
    minLength = "1",
    maxLength = "200"
)
@OpenApiRequired
@OpenApiDescription("Search query string")
val query: String = ""

@OpenApiNumberValidation(
    minimum = "1",
    maximum = "100"
)
@OpenApiExample(raw = "20")
val pageSize: Int = 20