Job – Java Automation Lead (cat=REST)
Looking for a Backend Java/Spring Team Lead with Integration Experience (Remote) (Part Time): Read More

1. Overview

Lombok is a Java library that helps to reduce boilerplate code like getters, setters, etc. OpenAPI provides a property to auto-generate a model with Lombok annotations.

In this tutorial, we’ll explore how to generate a model with Lombok annotations using an OpenAPI code generator.

2. Project Setup

To begin with, let’s bootstrap a Spring Boot project and add the Spring Boot Starter Web and Lombok dependencies:


Additionally, we need the Swagger Annotations, Gson, and Java Annotation API dependencies to prevent errors related to packages in the generated code:


In the next section, we’ll create an API specification for a model named Book and later generate the code with Lombok annotation using the OpenAPI code generator.

3. Generating Model Using OpenAPI

The idea of OpenAPI is to write the API specification before actual coding begins. Here, we’ll create a specification file and generate a model based on the specification.

3.1. Creating Model Specification

First, let’s create a new file named bookapi.yml in the resources folder to define the Book specification:

openapi: 3.0.2
  version: 1.0.0
  title: Book Store
    name: MIT
          - book
        summary: Get All Books
            description: successful operation
                  $ref: '#/components/schemas/Book'
            description: Book not found
            content: { }
      type: object
        - id
        - name
        - author
          type: integer
          format: int64
          type: string
          type: string

In the specification above, we define the Book schema with id, name, and author fields. Additionally, we define an endpoint to get all stored books.

3.2. Generate a Model With Lombok Annotation

After defining the API specification, let’s add the OpenAPI plugin to the pom.xml to help generate the code based on the specification:

		    <additionalModelTypeAnnotations>@lombok.Data @lombok.NoArgsConstructor @lombok.AllArgsConstructor</additionalModelTypeAnnotations>

Here, we specify the location of the specification file for the plugin to check during the generation process. Also, we add the additionalModelTypeAnnotations property to add three Lombok annotations to the model.

For simplicity, we disable the generation of supporting files and API documentation.

Finally, let’s generate the Model by executing Maven install command:

$ ./mvnw install

The command above generates a Book model in the target folder.

3.3. Generated Code

Let’s see the generated Book model:

@lombok.Data @lombok.NoArgsConstructor @lombok.AllArgsConstructor
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2023-08-16T09:16:34.322697262Z[GMT]")
public class Book {
    public static final String SERIALIZED_NAME_ID = "id";
    private Long id;
    public static final String SERIALIZED_NAME_NAME = "name";
    private String name;
    public static final String SERIALIZED_NAME_AUTHOR = "author";
    private String author;
    // ... 

In the generated code above, the three Lombok annotations we defined in the plugin using the additionalModelTypeAnnotations property are added to the model class.

The @Data annotation helps generate the getters, setters, etc., at compile time. The @NoArgsConstructor generates an empty constructor, and the @AllArgsConstructor generates a constructor that takes an argument for all fields in the class.

4. Conclusion

In this article, we learned how to generate a model with Lombok annotation using the OpenAPI code generator. Adding the additionalModelTypeAnnotations property provides us the flexibility to add desired Lombok annotations.

As always, the complete source code for the examples is available over on GitHub.

Course – LS (cat=REST)

Get started with Spring 5 and Spring Boot 2, through the Learn Spring course :

res – REST (eBook) (cat=REST)
Comments are closed on this article!