File upload param not showing in Swagger UI 3.0 - spring-boot

I am creating swagger document using annotations in springboot application, all the APIs params are working instead of file param, file param is not being shown in the swagger UI. It is also not giving any errors in the logs related to the file attribute.
Below is the annotation being used to display the file param.
#ApiImplicitParam(name="mediafile", value="upload the file", dataTypeClass="File.class", required=true, paramType="form")
I also have changed paramType="formData" but still file attribute is still not showing up. Any help will be appreciated. Swagger = v3.0

Related

How to remove context-root from generated swagger

I have am application that has a context-root set (property: quarkus.http.root-path).
Using quarkus-resteasy-reactive-jackson, a resource was created with a #Path annotation.
Now I want to generate OpenAPI documentation for my resource.
As I want to deploy this into a API gateway, I require a server property with a context root in the swagger.
I added a server entry using the mp.openapi.servers property.
The problem now appears that when there is a root-path property, the generated swagger resource path includes this root path, e.g.
quarkus.http.root-path=/sample
mp.openapi.servers=http://localhost:8080/sample
Resource annotated with #Path("resource")
It seems that the resource path includes the root-path.
So importing this swagger into the API gateway (or just clicking on the Try button), results in a url of http://localhost:8080/sample/sample/resource being attempted which ofc does not exist.
Is there a way to not to add the root-path to the resource endpoint in swagger? (I tried using mp.openapi.extensions.application-path.disable=true, but this had no effect)
I managed to get past this by doing the following:
dont set quarkus.http.root-path
quarkus.rest.path=/sample
quarkus.http.non-application-root-path=/sample/q
mp.openapi.servers=https://localhost:8080/sample
So just want to know if anyone know of a better way of doing this?

Swagger not generating paths in yaml/json file when code is compiled

Trying to generate API documentation for a spring boot application using swagger. Using swagger-maven-plugin to generate yaml documentation from code. After compiling, the generated yaml/json file does not contain any path. However the controller class where the APIs are defined is getting scanned. But none of the APIs defined there are showing up in documentation. However accessing http://localhost:8080/api-docs shows a json and that is listing all the APIs as expected. What could be the issue? I have made sure of the following:
controller is annotated with #Api
tag value is set to false in pom.xml
basepath is the same across pom and controller class
All API paths are of the form http://localhost:8080/{id}/
Got my problem resolved. The Controller class methods were not declared public and hence was not showing up in swagger.yaml and json files even though the api-docs were listing them.
Try mapping your controller into a path.
Eg:- #Controller #RequestMapping(value = "/api")
For further clarification you can refer this article: https://www.baeldung.com/spring-controllers

Swagger UI 2.9.2 not showing services under controller agrupations

I'm using springfox swagger to document the REST web services under a Spring Boot project, but swagger-ui is not working... I get to the index page and see all the controller agrupations, but when I select any of them, no services are shown.
I have followed the instructions as explained here:
https://www.baeldung.com/swagger-2-documentation-for-spring-rest-api
Viewing code behind the index page of the swagger-ui I see there are a lot of errors, all of them are the same:
system.js:461 TypeError: Array.prototype.filter called on null or
undefined
at filter ()
at system.js:458
at Object.currentFilter (system.js:262)
at t.value (filter.jsx:24)
at t.render (root-injects.js:93)
at u._renderValidatedComponentWithoutOwnerOrContext (ReactCompositeComponent.js:796)
at u._renderValidatedComponent (ReactCompositeComponent.js:819)
at u.performInitialMount (ReactCompositeComponent.js:359)
at u.mountComponent (ReactCompositeComponent.js:255)
at Object.mountComponent (ReactReconciler.js:43) (anonymous) # system.js:461
I have also tried to see if the JSON received by v2/api-docs had anything extrange, but nothing... everything seems fine.
Now something even stranger... I have tried with swagger version 2.8.0, and then swagger-ui shows everything correctly. BUT! If I look at the code behind, the same errors are displayed.
Any recomendation?
I finally got it working... the problem was I set up the security of spring to access certain controllers and had added some of thee paths swagger needs at the whitelist, but had missed 2 paths swagger needed. I added them and now everything works fine... here are the paths I have added to the whitelist for swagger to work:
<url path="/webjars/**" />
<url path="/v2/**" />
<url path="/configuration/**" />
<url path="/swagger*/**" />

generate sample example in swagger UI (in Spring boot project)

I am using a spring boot application and have configured using Swagger UI.
I want to know whether we could pre-populate the example value with sample value so we can hit the "Try it out!" button without having to type in some sample values to get a response.
It must be present there.
Is there a way we can do this using annotations or a separate file which Swagger uses?
I am using a spring boot project with springfox-swagger2:2.7.0 and springfox-swagger-ui:2.7.0 with dependencies added using gradle.
Since the #ApiParam properties example and examples are not working (see this issue on GitHub), support for adding examples is limited/non existing.
What you can do for simple parameters (#RequestParam) is to add the #ApiParam annotation with the defaultValue property, like this:
#GetMapping
public List<Foo> findAll(
#RequestParam(required = false)
#ApiParam(defaultValue = "foo") // Put the default value here
String input) {
// ...
}
However, there is no support yet for doing this with #RequestBody parameters.
A possible workaround for #RequestBody parameters is by clicking on the code box at the right side of the Swagger tester, where it says Example value. If you click on it, it will insert that example into the field itself.
Here is a workaround for providing an example:
Inject html into swagger
#ApiParam(
name="whatever",
value="whatever",
defaultValue="none</p><p>Example: xyz</p>"
)
They don't protect against it in the latest version 2.9.2.

How to create the file browser in view for spring roo?

I'm new in spring roo. I want to create a page with file upload. I used spring roo to create all pages and i try to use it to create a file browser button in file upload page. The problem is spring roo using spring form tag which doesn't have file browser. I solve this problem by using html input type="file" tag instead, but the spring roo showed the error like this "Failed to invoke handler method [public void egat.spring.roo.ptu.io.web.ImportExcelController.post(java.lang.Long,org.springframework.ui.ModelMap,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)]; nested exception is java.lang.IllegalStateException: Could not find #PathVariable [id] in #RequestMapping "
How can i solve this problem?
There is defect in jira raised against this issue you can vote for it.
https://jira.springsource.org/browse/ROO-442
Spring file upload in a mixed form
Check this out till this bug is resolved

Resources