Spring-Doc / OpenAPI / Swagger + VAVR-Future

26 May
2020

As already documented in my previous article about Spring and VAVR, I’m using the Future’s provided by VAVR as return types in my controller.

What I’m also using, is the SpringDoc OpenAPI library to generate my OpenAPI specification. By default, SpringDoc has no clue about VAVR and how to handle its Future type.

Thus, by default, SpringDoc transfers the VAVR-Future into a wrapper and thus creates a Swagger/OpenAPI-Component for this wrapper, having all the methods of VAVRs Future instead of the type it is wrapping.

To disable this, I added the following call to the class configuring my SpringDoc integration:

package com.dominikdorn.sample.configuration;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.vavr.concurrent.Future;
import org.springdoc.core.GroupedOpenApi;
import org.springdoc.core.converters.ConverterUtils;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class OpenAPIConfiguration {
static {
ConverterUtils.addResponseWrapperToIgnore(Future.class);
}
@Bean
public GroupedOpenApi publicOpenAPI( ) {
return GroupedOpenApi
.builder()
.setGroup("web")
.packagesToScan("com.dominikdorn.sample.web")
.build();
}
@Bean
public GroupedOpenApi v3OpenAPI() {
return GroupedOpenApi
.builder()
.setGroup("v3")
.packagesToScan("com.dominikdorn.sample.v3.web")
.build();
}
}

I’ve specified it in a static block in the component so that it calls the also static method “addResponseWrapperToIgnore” in SpringDocs’ ConverterUtils, telling it to treat VAVRs Future as a wrapper (or better to ignore it and look at the underlying value).

Comment Form

top