Models
The processor will create simple POJOs classes for the object schemas used in the OpenAPI description. A POJO will only have (annotated) properties and get/set methods for its properties.
The following api describes two endpoints:
-
the first one
/book-inlinedefines the response schema inline. This is interesting because the api does not provide aschemaname. -
the second one
/bookreferences a named schema.
openapi: 3.1.0
info:
title: model example
version: 1.0.0
paths:
/book-inline:
get:
responses:
'200':
description: none
content:
application/json:
schema:
type: object
properties:
isbn:
type: string
title:
type: string
/book:
get:
responses:
'200':
description: none
content:
application/json:
schema:
$ref: '#/components/schemas/Book'
components:
schemas:
Book:
type: object
properties:
isbn:
type: string
title:
type: string
The second endpoint uses a schema with a name, so the processor can simply create a POJO using the name as the Java class name.
package generated.model;
import com.fasterxml.jackson.annotation.JsonProperty;
public class Book {
@JsonProperty("isbn")
private String isbn;
@JsonProperty("title")
private String title;
public String getIsbn () {
return isbn;
}
public void setIsbn (String isbn) {
this.isbn = isbn;
}
public String getTitle () {
return title;
}
public void setTitle (String title) {
this.title = title;
}
}
The first endpoint has no name, and the processor invents a name based on the endpoint description. In this case the name will be BookInlineResponse200. To create a unique name and avoid name collisions with other inline objects, it is created by concatenating:
-
the path of the endpoint,
/book-inlineis mapped toBookInline -
Response, because it is an inline object described underresponses: -
200, which is the http status code of the response
which is finally the bulky BookInlineResponse200.
Apart from the generated name it will have exactly the same content (i.e., properties and setter/getter) since the schema description is identical.
readOnly/writeOnly
Using readOnly/writeOnly on object schema properties
Foo:
type: object
properties:
barRead:
readOnly: true
allOf:
- $ref: '#/components/schemas/Bar'
barWrite:
writeOnly: true
allOf:
- $ref: '#/components/schemas/Bar'
will translate to @JsonProperty annotations with read-only or write-only access:
public class Foo {
@JsonProperty(value = "barRead", access = JsonProperty.Access.READ_ONLY)
private Bar barRead;
@JsonProperty(value = "barWrite", access = JsonProperty.Access.WRITE_ONLY)
private Bar barWrite;
// ....
}