Mr.Turtle
Mr.Turtle

Reputation: 3090

Query Parameters in case class - Swagger Docs

I am writing an API for my application. The application allows administrators to search for users with query params.

Image of all the query params

My problem

There are a lot of query parameters which are using a lot space in my controllers. Currently I have solved it by having all the QueryParameters as parameters in the method, like this:

def findUser (
            @ApiParam(name = "firstName", value = "First name", `type` = "query")
            @RequestParam(value = "firstName", required = false) firstName: String,

            @ApiParam(name = "surname", value = "Surname", `type` = "query")
            @RequestParam(value = "surname", required = false) surname: String,

            @ApiParam(name = "email", value = "Email adress", `type` = "query")
            @RequestParam(value = "email", required = false) email: String,

            @ApiParam(name = "telephoneNumber", value = "Phone number", `type` = "query")
            @RequestParam(value = "telephoneNumber", required = false) telephoneNumber: String,

            @ApiParam(name = "landlineNumber", value = "Land line number", `type` = "query")
            @RequestParam(value = "landlineNumber", required = false) landlineNumber: String,

            @ApiParam(name = "dateOfBirth", value = "Date of Birth", `type` = "query")
            @RequestParam(value = "dateOfBirth", required = false) dateOfBirth: String,

            @ApiParam(name = "postalAddress", value = "Postal adress", `type` = "query")
            @RequestParam(value = "postalAddress", required = false) postalAddress: String,

            @ApiParam(name = "postCode", value = "Post code", `type` = "query")
            @RequestParam(value = "postCode", required = false) postCode: String
) = { 
// doing stuff
}

Question:

Is there a way to extract all the query params into a class or a object in Swagger Docs? Like illustrated below:

def allQueryParamsInACaseClass (
  queryParams : AllQueryParams
)

Upvotes: 3

Views: 379

Answers (1)

Mr.Turtle
Mr.Turtle

Reputation: 3090

I fixed it by using @ModelAttribute and then created a case class with @BeanProperties.

def allQueryParamsInACaseClass ( 
  @ModelAttribute queryParams: AllQueryParams
)

case class AllQueryParams (
  ...
  @ApiParam(name = "firstName", value = "First name", `type` = "query")
  @RequestParam(value = "firstName", required = false) @BeanProperty firstName: String,
  ..
)

Upvotes: 2

Related Questions