DEV Community

anand jaisy
anand jaisy

Posted on

OpenAPI + Swagger UI with Micronaut Application

Introduction

APIs (Application Programming Interfaces) are the backbone of modern software, connecting applications and systems seamlessly. In this interconnected world, OpenAPI has emerged as a game-changer for designing, building, and managing APIs.

What is OpenAPI?

OpenAPI is a specification for designing APIs. Formerly known as Swagger, it provides a standard way to describe the structure of your APIs in a machine-readable format, typically using a YAML or JSON document. This document acts as the blueprint for your API, detailing endpoints, request/response schemas, authentication methods, and more.

Micronaut includes support for producing OpenAPI (Swagger) YAML at compilation time. Micronaut will at compile time produce a OpenAPI 3.x compliant YAML file just based on the regular Micronaut annotations and the javadoc comments within your code.

Micronaut Launch

https://micronaut.io/launch?type=DEFAULT&name=demo&package=com.example&javaVersion=JDK_21&lang=JAVA&build=GRADLE_KOTLIN&test=JUNIT&features=openapi&features=swagger-ui&features=eclipsestore&features=eclipsestore-rest
Enter fullscreen mode Exit fullscreen mode

Using the Micronaut CLI

mn create-app --build=gradle_kotlin --jdk=21 --lang=java --test=junit --features=openapi,swagger-ui,eclipsestore,eclipsestore-rest schoolstaff.perk
Enter fullscreen mode Exit fullscreen mode

Dependencies

annotationProcessor("io.micronaut.openapi:micronaut-openapi")
Enter fullscreen mode Exit fullscreen mode

To use the Swagger Annotations or Micronaut OpenAPI annotations add them to compile classpath

Once dependencies have been configured a minimum requirement is to add a @OpenAPIDefinition annotation to your Application class

import io.micronaut.runtime.Micronaut;
import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.annotations.info.Contact;
import io.swagger.v3.oas.annotations.info.Info;
import io.swagger.v3.oas.annotations.info.License;


@OpenAPIDefinition(
        info = @Info(
                title = "Sample application",
                version = "0.0",
                description = "My API",
                license = @License(name = "Apache 2.0", url = "https://foo.bar"),
                contact = @Contact(url = "https://gigantic-server.com", name = "Sample", email = "sample@application-server.com")
        )
)
public class Application {

    public static void main(String[] args) {
        Micronaut.run(Application.class);
    }
}
Enter fullscreen mode Exit fullscreen mode

With that in place, you compile your project and a OpenAPI YAML file will be generated to the META-INF/swagger directory of your project’s class output. For example, the above configuration generates:

For Java build/classes/java/main/META-INF/swagger/hello-world-0.0.yml

openapi: 3.0.1
info:
  title: the title
  description: My API
  contact:
    name: Fred
    url: https://gigantic-server.com
    email: Fred@gigagantic-server.com
  license:
    name: Apache 2.0
    url: https://foo.bar
  version: "0.0"
Enter fullscreen mode Exit fullscreen mode

In the application.properties file expose the swagger path

micronaut.router.static-resources.swagger-ui.mapping=/swagger-ui/**
micronaut.router.static-resources.swagger-ui.paths=classpath\:META-INF/swagger/views/swagger-ui
micronaut.router.static-resources.swagger.mapping=/swagger/**
micronaut.router.static-resources.swagger.paths=classpath\:META-INF/swagger
Enter fullscreen mode Exit fullscreen mode

The swagger is exposed on this URL - http://localhost:8080/swagger-ui/index.html

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay