The {@link oaj.jsonschema.JsonSchemaGenerator.Builder#useBeanDefs()} setting can be used to reduce the size of your
generated Swagger JSON files by creating model definitions for beans and referencing those definitions through $ref attributes.
This setting is disabled by default but can be set on the {@link oajr.RestContext.Builder} object:
| @HookEvent(INIT)
| public void init(RestContext.Builder builder) {
| builder.jsonSchemaGenerator().useBeanDefs();
| }
In the Swagger UI, this causes bean definitions to show up in the Models section at the bottom of the page:
In the generated Swagger JSON, embedded schema information for beans will be replaced with references such as the one shown below for the Order bean:
| {
| "swagger": "2.0",
| "paths": {
| "/store/order": {
| "get": {
| "operationId": "getOrders",
| "summary": "Petstore orders",
| "responses": {
| "200": {
| "description": "OK",
| "schema": {
| "description": "java.util.Collection<org.apache.juneau.examples.rest.petstore.Order>",
| "type": "array",
| "items": {
| "$ref": "#/definitions/Order"
| }
| },
| ...
| ...
| ...
| ...
| ...
| },
| "definitions": {
| "Order": {
| "type": "object",
| "properties": {
| "id": {
| "type": "integer",
| "format": "int64"
| },
| "petId": {
| "type": "integer",
| "format": "int64"
| },
| "shipDate": {
| "type": "string"
| },
| "status": {
| "type": "string",
| "enum": [
| "PLACED",
| "APPROVED",
| "DELIVERED"
| ]
| }
| },
| "description": "org.apache.juneau.examples.rest.petstore.Order",
| "example": {
| "id": 123,
| "petId": 456,
| "shipDate": "2012-12-21",
| "status": "APPROVED"
| }
| },
| ...
| }
Note that this does not affect how the information is rendered for that bean in the Swagger UI: