what is openapi-processor?
openapi-processor is a small framework to process OpenAPI yaml files. Currently, openapi-processor provides java code generation for Spring Boot, Micronaut and conversion to json.
It does support gradle and maven to run any openapi-processor as part of the build process.
See the documentation for more. There is also a playground to preview the processors.
what is new?
See the release notes for the full details (it is the same for spring & micronaut).
Apart from a couple of bug fixes and improvements for multipart requests and bean-validations, openapi-processor is now able to automatically add a suffix to the generated model classes.
This is enabled by configuring the model-name-suffix
in the mapping.yaml
:
openapi-processor-mapping: v2
options:
package-name: io.openapiprocessor.sample
model-name-suffix: Resource # or Dto or ...
The model-name-suffix
option sets a suffix that is automatically appended to all generated model and enum classes.
The suffix helps to
avoid duplicate class names in generated code and normal code
makes it easier to recognize which role or in which context a class is used. Is it a data transfer class or is it a domain class?
keeps the suffix "noise" out of the OpenAPI description
Usually you will separate the classes by putting them in different packages. This helps to distinguish the classes, but when both are used in the same code, i.e. when converting one format to the other, it is a lot easier to distinguish them by their class name instead of their package name.
If a schema name from the OpenAPI description already ends with the model-name-suffix
, the processor will not append the suffix. This allows to migrate an existing api with a suffix in the API to model-name-suffix
step by step.
Example:
OpenAPI
paths:
/foo:
get:
responses:
'200':
description: the foo result
content:
application/json:
schema:
$ref: '#/components/schemas/Foo' # (1)
components:
schemas:
Foo:
type: object
properties:
nested:
$ref: '#/components/schemas/BarResource' # (1)
BarResource:
type: object
properties:
prop:
type: string
mapping.yaml
openapi-processor-mapping: v2
options:
package-name: io.openapiprocessor.sample
model-name-suffix: Resource # (2)
Java
// interface
public interface Api {
@Mapping("/foo")
FooResource getFoo(); // (3)
}
// pojos
public class FooResource { // (3)
// ...
@JsonProperty("nested")
private BarResource nested;
// ...
}
public class BarResource { // (4)
// ...
}
- a schema name without suffix
- the suffix configuration
- the class name of the Foo schema got the configured Resource suffix
- the class name of the
BarResource
is identical to the original schema name. Since the existing suffix is equal tomodel-name-suffix
it is ignored. Otherwise, This prevents funny class names likeBarResourceResource
.
That’s it.
Top comments (0)