Experimental compile-time OpenAPI integration for Javalin and Ktor ecosystem.
- Reflection free, does not perform any extra operations at runtime
- Uses
@OpenApi
to simplify migration from bundled OpenApi implementation - Supports Java 8+ (also 16 and any further releases) and Kotlin (through Kapt)
- Uses internal WebJar handler that works with
/*
route out of the box - Provides better projection of OpenAPI specification
- Schema validation through Swagger core module
Download required dependencies:
repositories {
maven { url 'https://repo.panda-lang.org/releases' }
}
dependencies {
def openapi = "1.1.7"
annotationProcessor "io.javalin-rfc:openapi-annotation-processor:$openapi" // Use Kapt in Kotlin projects
// Javalin
implementation "io.javalin-rfc:javalin-openapi-plugin:$openapi"
implementation "io.javalin-rfc:javalin-swagger-plugin:$openapi" // for Swagger UI
implementation "io.javalin-rfc:javalin-redoc-plugin:$openapi" // for ReDoc UI
// Ktor
implementation "io.javalin-rfc:ktor-openapi-plugin:$openapi"
}
And enable OpenAPI plugin for Javalin with Swagger UI:
Javalin.create(config -> {
String deprecatedDocsPath = "/swagger-docs";
OpenApiConfiguration openApiConfiguration = new OpenApiConfiguration();
openApiConfiguration.setTitle("AwesomeApp");
openApiConfiguration.setDocumentationPath(deprecatedDocsPath); // by default it's /openapi
config.registerPlugin(new OpenApiPlugin(openApiConfiguration));
SwaggerConfiguration swaggerConfiguration = new SwaggerConfiguration();
swaggerConfiguration.setDocumentationPath(deprecatedDocsPath);
config.registerPlugin(new SwaggerPlugin(swaggerConfiguration));
ReDocConfiguration reDocConfiguration = new ReDocConfiguration();
reDocConfiguration.setDocumentationPath(deprecatedDocsPath);
config.registerPlugin(new ReDocPlugin(reDocConfiguration));
})
.start(80);
Or for Ktor application using the features:
install(OpenApiFeature) {
documentationPath = "/swagger-docs"
}
// Swagger and ReDoc are not supported yet
- Reposilite with Javalin
- Hub with Ktor
- Javalin OpenApi Example by paulkagiri
openapi-annotation-processor
- compile-time annotation processor, should generateopenapi.json
resource or just a classopenapi-annotations
- annotations used by annotation processor to generate OpenAPI docs
Javalin:
javalin-openapi-plugin
- loadsopenapi.json
resource and serves OpenApi endpointjavalin-swagger-plugin
- serves Swagger UIjavalin-redoc-plugin
- serves ReDoc UIjavalin-apptest
- example Javalin application that uses OpenApi plugin
Ktor:
ktor-openapi-plugin
- loadsopenapi.json
resource and serves OpenApi endpointktor-apptest
- example Ktor application that uses OpenApi plugin