【发布时间】:2016-04-05 07:07:27
【问题描述】:
我有以下用于 Swagger 的 YAML:
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
使用 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
如您所见,Swagger 对type 和state 使用字符串。在生成的 API 中,我得到以下方法签名:
public List<Facility> findFacilities (List<String> type, List<String> state)
throws ApiException;
所以 Swagger 使用字符串而不是生成的枚举 Facility.TypeEnum 和 Facility.StateEnum。显然这与警告有关。因此,如果我设法“为数组参数提供内部类型”,我想我也会在签名中获得枚举。但是我在 YAML 中找不到配置它。
如何修复我的 YAML 定义以使 Swagger 使用枚举而不是字符串?
如何为数组参数提供内部类型?
【问题讨论】: