mirage1s7
mirage1s7

Reputation: 317

How to get Swagger UI's Parameter to be Dropdown menu instead of Text Input

I am using swagger to display my RESTApi, one parameter of an API takes string as input and convert it to enum value. Is there any way to display a drop-down menu on the Swagger UI instead of having a text input field so that users can only select the string values within the enum value.

Upvotes: 24

Views: 68360

Answers (5)

Abdullah Imran
Abdullah Imran

Reputation: 399

with swagger 3(OAS) you can achieve that with below code

public class TestController{

@Operation(
      tags = "APIs",
      summary = "Find XYZ",
      parameters = {
            @Parameter(
            in = ParameterIn.QUERY,
            name = "id",
            schema = @Schema(allowableValues = { "value1", "value2",
                "value3", "value4" }),
            description ="description ")
      })
     
@GetMapping
public Flux<Response> getResponse(@RequestParam(value = "id") Optional<String> id){

}    
}

So if you run this you will have value1, value2, value3, value4 as dropdown value for id field in swagger

Upvotes: 3

Arya Mohanan
Arya Mohanan

Reputation: 769

The above solutions did not work for me. The simplest way to add a dropdown list in Swagger is to update the swagger.json file.

"parameters": [
                {
                    "name": "status",
                    "in": "query",
                    "type": "string",
                    "default": "available",
                    "enum": [
                                "active",
                                "inactive",
                                "available"
                    ],
                    "required": true
                }     
            ],

Note: I'm using swagger version 2.0

enter image description here

Upvotes: 0

localhost
localhost

Reputation: 246

The key is to use allowableValues in the @ApiParam annotation.

The demo showing the result:

http://petstore.swagger.io/#!/pet/findPetsByStatus

Check out pet/findByStatus, it's not a dropdown but input is limited in the multi-select box.

Upvotes: 11

Sagar Vaghela
Sagar Vaghela

Reputation: 1263

You can directly use enum instead of String parameter as a API parameter.

@RequestMapping(value = "/test", method = RequestMethod.POST)
public void test(EnumTest enum) {
    // body
}

EnumTest.java

public enum EnumTest {

    One("One"),
    Two("Two");

    private String str;

    EnumTest(String str){
       this.str = str;
    }

    public String getStr() {
       return str;
    }

}

Upvotes: 6

Kundan
Kundan

Reputation: 259

you can display dropdown using following code of swagger. You have to use enum. e.g. if you want to take gender as input then there can be three possible values

  • male, female, other
-name: "gender"
          in: "query"
          type: "string"
          enum: [ "male", "female", "other"]
          description: "Enter user gender here."
          required: true

Upvotes: 11

Related Questions