lex*_*ore 4 java enums yaml swagger
我有以下YAML for Swagger:
swagger: '2.0'
info:
...
host: adam.noncd.db.de
basePath: /api/v1.0
schemes:
- https
consumes:
- application/json
produces:
- application/json
paths:
/facilities:
get:
description: Access to the facilities known to the system
operationId: findFacilities
produces:
- application/json
parameters:
- name: type
in: query
description: type of the facility to filter by
default: ["ESCALATOR", "ELEVATOR"]
required: false
type: array
items:
enum: ["ESCALATOR", "ELEVATOR"]
collectionFormat: csv
uniqueItems: true
- name: state
in: query
description: the state of the facility to filter by
default: ["ACTIVE", "INACTIVE", "UNKNOWN"]
required: false
type: array
items:
enum: ["ACTIVE", "INACTIVE", "UNKNOWN"]
collectionFormat: csv
uniqueItems: true
responses:
'200':
description: facility data
schema:
type: array
items:
$ref: '#/definitions/facility'
'400':
description: The given filters contained invalid values.
'406':
description: The requested representation format is not available.
'500':
description: A processing error has occurred.
'503':
description: The service has been disabled temporarily.
'/facilities/{equipmentnumber}':
get:
description: Returns the facility identify by equipmentnumber
operationId: getFacilityByEquipmentNumber
produces:
- application/json
parameters:
- name: equipmentnumber
in: path
description: equipmentnumber of the facility to fetch
required: true
type: integer
format: int64
minimum: 1
responses:
'200':
description: Facility data
schema:
$ref: '#/definitions/facility'
'404':
description: The requested facility could not be found.
'406':
description: The requested representation format is not available.
'500':
description: A processing error has occurred.
'503':
description: The service has been disabled temporarily.
'/stations/{stationnumber}':
get:
description: Returns the railway station identified by stationnumber
operationId: findStationByStationNumber
produces:
- application/json
parameters:
- name: stationnumber
in: path
description: stationnumber of the station to fetch
required: true
type: integer
format: int64
minimum: 1
responses:
'200':
description: station data
schema:
$ref: '#/definitions/station'
'406':
description: Requested representation format is not available.
'500':
description: A processing error has occurred.
'503':
description: The service has been disabled temporarily.
definitions:
station:
type: object
required:
- stationnumber
- name
properties:
stationnumber:
type: integer
format: int64
description: "Identification number of the station"
name:
type: string
description: "Name of the station"
facilities:
type: array
items:
$ref: '#/definitions/facility'
facility:
type: object
required:
- equipmentnumber
- type
- state
- stationnumber
properties:
equipmentnumber:
type: integer
format: int64
'type':
type: string
enum: ["ESCALATOR", "ELEVATOR"]
'description':
type: string
description: Textual description of place
geocoordX:
type: number
format: double
description: geocoordinate component in DB REF format
geocoordY:
type: number
format: double
description: geocoordinate component in DB REF format
state:
type: string
enum: ["ACTIVE", "INACTIVE", "UNKNOWN"]
stationnumber:
type: integer
format: int64
Run Code Online (Sandbox Code Playgroud)
使用Swagger Codegen生成Java客户端时,我收到以下警告:
[WARNING] no property from null, null, {ENUM=[ESCALATOR, ELEVATOR], TITLE=null, DESCRIPTION=null, DEFAULT=null, PATTERN=null, DESCRIMINATOR=null, MIN_ITEMS=null, MAX_ITEMS=null, MIN_PROPERTIES=null, MAX_PROPERTIES=null, MIN_LENGTH=null, MAX_LENGTH=null, MINIMUM=null, MAXIMUM=null, EXCLUSIVE_MINIMUM=null, EXCLUSIVE_MAXIMUM=null, UNIQUE_ITEMS=null, EXAMPLE=null, TYPE=null, FORMAT=null, READ_ONLY=null, VENDOR_EXTENSIONS={}}
[WARNING] no property from null, null, {ENUM=[ACTIVE, INACTIVE, UNKNOWN], TITLE=null, DESCRIPTION=null, DEFAULT=null, PATTERN=null, DESCRIMINATOR=null, MIN_ITEMS=null, MAX_ITEMS=null, MIN_PROPERTIES=null, MAX_PROPERTIES=null, MIN_LENGTH=null, MAX_LENGTH=null, MINIMUM=null, MAXIMUM=null, EXCLUSIVE_MINIMUM=null, EXCLUSIVE_MAXIMUM=null, UNIQUE_ITEMS=null, EXAMPLE=null, TYPE=null, FORMAT=null, READ_ONLY=null, VENDOR_EXTENSIONS={}}
...
[WARNING] warning! No inner type supplied for array parameter "type", using String
[WARNING] warning! No inner type supplied for array parameter "state", using String
Run Code Online (Sandbox Code Playgroud)
如您所见,Swagger使用字符串type和state.在生成的API中,我得到以下方法签名:
public List<Facility> findFacilities (List<String> type, List<String> state)
throws ApiException;
Run Code Online (Sandbox Code Playgroud)
所以Swagger使用字符串而不是生成的枚举Facility.TypeEnum和Facility.StateEnum.显然,这与警告有关.因此,如果我设法"为数组参数提供内部类型",我想我也会在签名中获得枚举.但我找不到在YAML配置它.
如何修复我的YAML定义以使Swagger使用枚举而不是字符串?
如何为数组参数提供内部类型?
您需要提供有效的JSON模式来定义数组的内部类型.例如:
yaml
items:
enum: ["ACTIVE", "INACTIVE", "UNKNOWN"]
dos 不指定内部值的类型,只是允许的值.正确的定义是:
items:
type: string
enum: ['ACTIVE', 'INACTIVE', 'UNKNOWN']
Run Code Online (Sandbox Code Playgroud)
虽然这似乎是重复的(意思是,人们可以假设枚举中的允许值的类型是a string),JSON模式希望您明确表示类型.