Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using @RequestParam annotated method with swagger ui

I am using Springfox libraries to generate documentation for REST service and display it in Swagger UI. I followed the directions in Springfox documentation.

I have one controller, which uses parameters from query string and the method is mapped as following:

@ApiOperation(value = "") @RequestMapping(method = GET, value = "/customcollection/{id}/data") public Iterable<CustomeType> getData(@ApiParam(value = "The identifier of the time series.")      @PathVariable String id,     @ApiParam(name = "startDate", value = "start date", defaultValue = "")     @RequestParam("startDate") String startDate,     @ApiParam(name = "endDate", value = "end date", defaultValue = "")     @RequestParam("endDate") String endDate) 

The resulting mapper in swagger-ui then displayed as:

GET /customcollection/{id}/data{?startDate,endDate} 

Parameters are displayed correctly in the UI: enter image description here

But when I click on Try it Out, the request URL is misformed:

http://localhost:8080/customcollection/1/data{?startDate,endDate}?startDate=1&endDate=2

How can it be fixed?

like image 735
jny Avatar asked Oct 27 '15 20:10

jny


People also ask

How do you add annotations in swagger?

Step 1: Open the User. java and add @ApiModel annotation just above the class name. Add the description about the User model. @ApiModel: It provides additional information about Swagger Models.

What are the annotations used in swagger?

x parameter annotations like @PathParam, @QueryParam, @HeaderParam, @FormParam, and @BeanParam. Although swagger-core scans these annotations by default, we can use @ApiParam to add more details about the parameters or change the values as they are read from the code.

What does the @RequestParam annotation do?

In Spring MVC, the @RequestParam annotation is used to read the form data and bind it automatically to the parameter present in the provided method. So, it ignores the requirement of HttpServletRequest object to read the provided data.


1 Answers

This was caused by the line

 enableUrlTemplating(true) 

in Docket configuration which I copied from example and forgot to remove.

After removing this line everything is working as expected.

like image 191
jny Avatar answered Sep 18 '22 10:09

jny