Defining enum for array in Swagger 2.0

Esko Piirainen picture Esko Piirainen · Apr 27, 2016 · Viewed 16.5k times · Source
type": "array",
"items": {
    "type": "string",
    "enum": ["MALE","FEMALE","WORKER"]
}

or

type": "array",
"items": {
    "type": "string",
},
"enum": ["MALE","FEMALE","WORKER"]

?

Nothing in the spec about this. The goal is of course to get swagger-ui to show the enum values.

Answer

Arnaud Lauret picture Arnaud Lauret · May 4, 2016

It will depend on what you want to enum:

Each enum value MUST be of the described object type

  • in first case a String
  • in second one an Array of String

First syntax means These are the possible values of the String in this array

AnArray:
  type: array
  items:
    type: string
    enum:
      - MALE
      - FEMALE
      - WORKER

This array can contain multiple String, but each String must have MALE, FEMALE or WORKER value.

Rendering in Swagger UI: You have to put mouse pointer on the value to see enum

Second one means These are the possible values of this Array

AnotherArray:
  type: array
  items:
    type: string
  enum:
    - 
      - FEMALE
      - WORKER
    -
      - MALE
      - WORKER

Each enum value is therefore an array. In this example, this array can only have to possible value ["FEMALE","WORKER"] and ["MALE","WORKER"].

Unfortunately even if this syntax is valid, no enum values are shown in Swagger UI.