While integrating swagger-ui
with a reactive spring project generated using JHipster 7.1.0 for Java 11. I added the below dependencies.
The application has below dependencies of swagger
POM dependencies
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-common</artifactId>
<version>1.4.3</version>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-webflux-core</artifactId>
<version>1.4.3</version>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-webflux-ui</artifactId>
<version>1.4.3</version>
</dependency>
Apart from that we added a configuration SwaggerConfig.java
import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.annotations.info.Info;
import io.swagger.v3.oas.models.media.StringSchema;
import io.swagger.v3.oas.models.parameters.Parameter;
import org.springdoc.core.GroupedOpenApi;
import org.springdoc.core.customizers.OpenApiCustomiser;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@OpenAPIDefinition(info = @Info(title = "Amazingbabbage", version = "1.0", description = "Documentation APIs v1.0"))
public class SwaggerConfig {
@Bean
public GroupedOpenApi employeeGroupApi() {
return GroupedOpenApi.builder()
.group("all")
.pathsToMatch("/api/**")
.build();
}
public OpenApiCustomiser getOpenApiCustomiser() {
return openAPI -> openAPI.getPaths().values().stream().flatMap(pathItem ->
pathItem.readOperations().stream())
.forEach(operation -> {
operation.addParametersItem(new Parameter().name("Authorization").in("header").
schema(new StringSchema().example("token")).required(true));
operation.addParametersItem(new Parameter().name("userId").in("header").
schema(new StringSchema().example("test")).required(true));
});
}
}
{
"type" : "https://www.jhipster.tech/problem/problem-with-message",
"title" : "Internal Server Error",
"status" : 500,
"detail" : "No primary or single public constructor found for interface org.springframework.http.server.reactive.ServerHttpRequest - and no default constructor found either",
"path" : "/swagger-doc/swagger-ui.html",
"message" : "error.http.500"
}
Please share your feedback or inputs if you have faced similar issues.
CodePudding user response:
When you have both Spring MVC and Webflux are present, Spring Boot will configure your application to use Spring MVC only. (see : https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.spring-application.web-environment)
You need to ensure that the Spring MVC dependency is not present in your project.