- 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:
org.springframework.boot
spring-boot-starter-web
3.1.2
org.projectlombok
lombok
1.18.28
provided
Additionally, we need the Swagger Annotations, Gson, and Java Annotation API dependencies to prevent errors related to packages in the generated code:
javax.annotation
javax.annotation-api
1.3.2
com.google.code.gson
gson
2.10.1
io.swagger
swagger-annotations
1.6.2
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 info: version: 1.0.0 title: Book Store license: name: MIT paths: /books: get: tags: - book summary: Get All Books responses: 200: description: successful operation content: application/json: schema: $ref: '#/components/schemas/Book' 404: description: Book not found content: { } components: schemas: Book: type: object required: - id - name - author properties: id: type: integer format: int64 name: type: string author: 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:
org.openapitools
openapi-generator-maven-plugin
4.2.3
generate
${project.basedir}/src/main/resources/bookapi.yml
java
@lombok.Data @lombok.NoArgsConstructor @lombok.AllArgsConstructor
false
false
false
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"; @SerializedName(SERIALIZED_NAME_ID) private Long id;
public static final String SERIALIZED_NAME_NAME = "name";
@SerializedName(SERIALIZED_NAME_NAME)
private String name;
public static final String SERIALIZED_NAME_AUTHOR = "author";
@SerializedName(SERIALIZED_NAME_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.