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.
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.
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
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;
}
}
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
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
© 2022 - 2024 — McMap. All rights reserved.