I have added Swagger to my Spring Boot 2 application:
This is my Swagger config:
@Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket api() { // @formatter:off return new Docket(DocumentationType.SWAGGER_2) .select() .apis(RequestHandlerSelectors.any()) .paths(PathSelectors.any()) .build(); // @formatter:on } }
This is Maven dependency:
<!-- Swagger2 --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.8.0</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.8.0</version> </dependency>
When I try to invoke for example http://localhost:8080/api/actuator/auditevents it fails with the following error:
TypeError: Failed to execute 'fetch' on 'Window': Request with GET/HEAD method cannot have body.
What am I doing wrong and how to fix it ?
The error message actually says what the problem is. You post data with curl using the -d option while trying to use GET.
If you use the -d option curl will do POST.
If you use -X GET option curl will do GET.
The HTTP GET method is for requesting a representation of the specified resource. Requests using GET should only retrieve data and hence cannot have body.
More info on GET vs POST
I ran into this issue. Here is how I resolved it:
I had a method like this:
[HttpGet] public IEnumerable<MyObject> Get(MyObject dto) { ... }
and I was getting the error. I believe swagger UI is interpreting the Get parameters as FromBody, so it uses the curl -d
flag. I added the [FromQuery] decorator and the problem was resolved:
[HttpGet] public IEnumerable<MyObject> Get([FromQuery]MyObject dto) { ... }
FYI this also changes the UI experience for that method. instead of supplying json, you will have a form field for each property of the parameter object.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With