May 2022
-
openapi-processor-spring/micronaut 2022.4
openapi-processor offers a new alternative OpenAPI 3.0 & 3.1 parser and fixes missing bean validation imports
-
OpenAPI 3.0 support includes JSON schema validation with detailed reporting.
-
OpenAPI 3.1 support is experimental and does not yet support schema validation.
OpenAPI 3.0 parser & JSON schema validation
openapi-processor provides an alternative internal OpenAPI 3.0 parser. It includes JSON schema validation with detailed reporting.
To enable it, set the parser configuration to INTERNAL.
// build.gradle processor configuration
openapiProcessor {
spring {
processor 'io.openapiprocessor:openapi-processor-spring:2022.4'
apiPath "${projectDir}/src/api/openapi.yaml"
targetDir "$projectDir/build/openapi"
mapping "${projectDir}/src/api/mapping.yaml"
// use internal OpenAPI parser
parser 'INTERNAL'
}
}
OpenAPI 3.1 (experimental)
The internal OpenAPI parser supports OpenAPI 3.1 but does not yet have schema validation.
To enable it, set the parser configuration to INTERNAL. It will automatically detect OpenAPI 3.0 & 3.1.
The processor does handle the renamed/changed OpenAPI 3.1 properties as needed for code generation:
type keyword
The type keyword allows a list of types. Defining a nullable type is done by adding "null" to the list of types.
# OpenAPI v3.0
type: string
nullable: true
# OpenAPI v3.1
type:
- "string"
- "null"
The processor does support the new nullable definition. Apart from that it will use the first non-null type as the type for code generation.
exclusiveMinimum and exclusiveMaximum keywords
# OpenAPI v3.0
maximum: 42
exclusiveMaximum: true
# OpenAPI v3.1
exclusiveMaximum: 42
which is used for adding bean validations.
missing import for javax.validation.constraints.Pattern
the `import`s for bean validation annotations were missing for item constraints of a mapped array. Having an api description like this
paths:
/test:
get:
parameters:
- in: query
name: patternParam
required: false
description: query parameter with @Pattern annotation
schema:
$ref: '#/components/schemas/PatternParam'
responses:
'200':
description: ok
schemas:
PatternParam:
type: array
items:
type: string
pattern: '.*'
and a mapping
openapi-processor-spring: v2
options:
package-name: generated
bean-validation: true
map:
types:
- type: array => java.util.List
did not generate the javax.validation.constraints.Pattern import.
package generated.api;
import annotation.Mapping;
import annotation.Parameter;
import java.util.List;
import javax.validation.constraints.Pattern;
public interface Api {
@Mapping("/test")
void getTest(@Parameter List<@Pattern(regexp = ".*") String> patternParam);
}
(ignore the @Mapping/@Parameter annotations, this is pseudo-code used by the integration tests)