All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.microprofile.openapi.annotations.media.Schema Maven / Gradle / Ivy

There is a newer version: 4.0.2
Show newest version
/**
 * Copyright (c) 2017 Contributors to the Eclipse Foundation
 * Copyright 2017 SmartBear Software
 * 

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at *

* http://www.apache.org/licenses/LICENSE-2.0 *

* Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.eclipse.microprofile.openapi.annotations.media; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import org.eclipse.microprofile.openapi.annotations.ExternalDocumentation; import org.eclipse.microprofile.openapi.annotations.enums.SchemaType; /** * The Schema Object allows the definition of input and output data types. These types can be objects, but also * primitives and arrays. This object is an extended subset of the JSON Schema Specification Wright Draft 00. * * @see OpenAPI * Specification Schema Object **/ @Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Inherited public @interface Schema { /** * Provides a java class as implementation for this schema. When provided, additional information in the Schema * annotation (except for type information) will augment the java class after introspection. * * @return a class that implements this schema **/ Class implementation() default Void.class; /** * Provides a java class to be used to disallow matching properties. Inline or referenced schema MUST be of a Schema * Object and not a standard JSON Schema. * * @return a class with disallowed properties **/ Class not() default Void.class; /** * Provides an array of java class implementations which can be used to describe multiple acceptable schemas. If * more than one match the derived schemas, a validation error will occur. *

* Inline or referenced schema MUST be of a Schema Object and not a standard JSON Schema. *

* * @return the list of possible classes for a single match **/ Class[] oneOf() default {}; /** * Provides an array of java class implementations which can be used to describe multiple acceptable schemas. If any * match, the schema will be considered valid. *

* Inline or referenced schema MUST be of a Schema Object and not a standard JSON Schema. *

* * @return the list of possible class matches **/ Class[] anyOf() default {}; /** * Provides an array of java class implementations which can be used to describe multiple acceptable schemas. If all * match, the schema will be considered valid. *

* Inline or referenced schema MUST be of a Schema Object and not a standard JSON Schema. *

* * @return the list of classes to match **/ Class[] allOf() default {}; /** * The name of the schema or property. *

* The name is REQUIRED when the schema is defined within * {@link org.eclipse.microprofile.openapi.annotations.Components}. The name will be used as the key to add this * schema to the 'schemas' map for reuse. *

* * @return the name of the schema **/ String name() default ""; /** * A title to explain the purpose of the schema. * * @return the title of the schema **/ String title() default ""; /** * Constrains a value such that when divided by the multipleOf, the remainder must be an integer. Ignored if the * value is 0. * * @return the multiplier constraint of the schema **/ double multipleOf() default 0; /** * Sets the maximum numeric value for a property. Value must be a valid number. Ignored if the value is an empty * string or not a number. * * @return the maximum value for this schema **/ String maximum() default ""; /** * If true, makes the maximum value exclusive, or a less-than criteria. * * @return the exclusive maximum value for this schema **/ boolean exclusiveMaximum() default false; /** * Sets the minimum numeric value for a property. Value must be a valid number. Ignored if the value is an empty * string or not a number. * * @return the minimum value for this schema **/ String minimum() default ""; /** * If true, makes the minimum value exclusive, or a greater-than criteria. * * @return the exclusive minimum value for this schema **/ boolean exclusiveMinimum() default false; /** * Sets the maximum length of a string value. Ignored if the value is negative. * * @return the maximum length of this schema **/ int maxLength() default Integer.MAX_VALUE; /** * Sets the minimum length of a string value. Ignored if the value is negative. * * @return the minimum length of this schema **/ int minLength() default 0; /** * A pattern that the value must satisfy. Ignored if the value is an empty string. * * @return the pattern of this schema **/ String pattern() default ""; /** * Constrains the number of arbitrary properties when additionalProperties is defined. Ignored if value is 0. * * @return the maximum number of properties for this schema **/ int maxProperties() default 0; /** * Constrains the number of arbitrary properties when additionalProperties is defined. Ignored if value is 0. * * @return the minimum number of properties for this schema **/ int minProperties() default 0; /** * Allows multiple properties in an object to be marked as required. * * @return the list of required schema properties **/ String[] requiredProperties() default {}; /** * Mandates whether the annotated item is required or not. * * @return whether or not this schema is required **/ boolean required() default false; /** * A description of the schema. * * @return this schema's description **/ String description() default ""; /** * Provides an optional override for the format. *

* If a consumer is unaware of the meaning of the format, they shall fall back to using the basic type without * format. For example, if \"type: integer, format: int128\" were used to designate a very large integer, * most consumers will not understand how to handle it, and fall back to simply \"type: integer\" *

* * @return this schema's format **/ String format() default ""; /** * Reference value to a Schema definition. *

* This property provides a reference to an object defined elsewhere. This property and all other properties are * mutually exclusive. If other properties are defined in addition to the ref property then the result is undefined. * * @return a reference to a schema definition **/ String ref() default ""; /** * Allows sending a null value for the defined schema. * * @return whether or not this schema is nullable **/ boolean nullable() default false; /** * Relevant only for Schema "properties" definitions. Declares the property as "read only". This means that it MAY * be sent as part of a response but SHOULD NOT be sent as part of the request. *

* If the property is marked as readOnly being true and is in the required list, the required will take effect on * the response only. A property MUST NOT be marked as both readOnly and writeOnly being true. *

* * @return whether or not this schema is read only **/ boolean readOnly() default false; /** * Relevant only for Schema "properties" definitions. Declares the property as "write only". Therefore, it MAY be * sent as part of a request but SHOULD NOT be sent as part of the response. *

* If the property is marked as writeOnly being true and is in the required list, the required will take effect on * the request only. A property MUST NOT be marked as both readOnly and writeOnly being true. *

* * @return whether or not this schema is write only **/ boolean writeOnly() default false; /** * A free-form property to include an example of an instance for this schema. *

* To represent examples that cannot be naturally represented in JSON or YAML, a string value is used to contain the * example with escaping where necessary. *

* When associated with a specific media type, the example string shall be parsed by the consumer to be treated as * an object or an array. * * @return an example of this schema **/ String example() default ""; /** * Additional external documentation for this schema. * * @return additional schema documentation **/ ExternalDocumentation externalDocs() default @ExternalDocumentation(); /** * Specifies that a schema is deprecated and SHOULD be transitioned out of usage. * * @return whether or not this schema is deprecated **/ boolean deprecated() default false; /** * Provides an override for the basic type of the schema. *

* Value MUST be a string. Multiple types via an array are not supported. *

* MUST be a valid type per the OpenAPI Specification. * * @return the type of this schema **/ SchemaType type() default SchemaType.DEFAULT; /** * Provides a list of enum values. Corresponds to the enum property in the OAS schema and the enumeration property * in the schema model. * * @return a list of allowed schema values */ String[] enumeration() default {}; /** * Provides a default value. The default value represents what would be assumed by the consumer of the input as the * value of the schema if one is not provided. *

* Unlike JSON Schema, the value MUST conform to the defined type for the Schema Object defined at the same level. *

* For example, if type is string, then default can be "foo" but cannot be 1. * * @return the default value of this schema */ String defaultValue() default ""; /** * Provides a discriminator property value. Adds support for polymorphism. *

* The discriminator is an object name that is used to differentiate between other schemas which may satisfy the * payload description. *

* * @return the discriminator property */ String discriminatorProperty() default ""; /** * An array of discriminator mappings. * * @return the discriminator mappings for this schema */ DiscriminatorMapping[] discriminatorMapping() default {}; /** * Allows schema to be marked as hidden. * * @return whether or not this schema is hidden */ boolean hidden() default false; /** * Only applicable if type=array. Sets the maximum number of items in an array. This integer MUST be greater than, * or equal to, 0. *

* An array instance is valid against "maxItems" if its size is less than, or equal to, the value of this keyword. *

* Ignored if value is Integer.MIN_VALUE. * * @return the maximum number of items in this array **/ int maxItems() default Integer.MIN_VALUE; /** * Only applicable if type=array. Sets the minimum number of items in an array. This integer MUST be greater than, * or equal to, 0. *

* An array instance is valid against "minItems" if its size is greater than, or equal to, the value of this * keyword. *

* Ignored if value is Integer.MAX_VALUE. * * @return the minimum number of items in this array **/ int minItems() default Integer.MAX_VALUE; /** * Only applicable if type=array. Determines if the items in the array SHOULD be unique. *

* If false, the instance validates successfully. If true, the instance validates successfully if all of its * elements are unique. *

* * @return whether the items in this array are unique **/ boolean uniqueItems() default false; /** * Provides a list of properties present in this schema. Use of the properties list does not preclude the annotation * scanning runtime from also including other properties found in the scan process. For example, if an * {@link #implementation() implementation} is also specified, the final set of properties used by the annotation * scanner will include properties from both this list and those found from introspection of the implementation * class, if any. * *

* In the case where properties are specified here in addition to an {@link #implementation() implementation}, the * attributes given for a property using a {@link SchemaProperty} will override the same attributes scanned (or * derived) from the implementation class. * *

* Example: * *

     * {@literal @}Schema(properties = {
     *   {@literal @}SchemaProperty(name = "creditCard", example = "4567100043210001"),
     *   {@literal @}SchemaProperty(name = "departureFlight", description = "The departure flight information."),
     *   {@literal @}SchemaProperty(name = "returningFlight")
     *})
     * 
* * @return a list of defined properties * * @since 2.0 */ SchemaProperty[] properties() default {}; }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy