What is Lombok?
Lombok is a Java library that can automatically plug into your editor and build tools when defining Java classes.
If you write Lombok annotations (e.g. @Getter or @setter), you don’t need to write another Getter or Setter methods again.
With one annotation, your class has a fully featured builder.
IDE
In this tutorial, we will use Eclipse.
Source Code
You can refer to the source code below.
https://github.com/ZarLiHninn/Form-Submitting-Lombok-WebJars
Let’s start Lombok
We will show you how to use Lombok in our previous project which is Form Submitting with Spring Boot Validation.
Step 1. Download and Install
- Please download lombok.jar from https://projectlombok.org/download
- Open downloaded lombok.jar.
- Specify your Eclipse IDE location by clicking Specify location and then you can see your Eclipse location.
- Click Install/Update.
- And now, your installation is completed and restart Eclipse.
Step 2. Add Lombok dependency in pom.xml
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
Step 3. Add Lombok annotation in Student.class
This is the code before using lombok.
↓
package com.reytech.demo.model;
import java.time.LocalDate;
import java.util.List;
import javax.validation.constraints.Email;
import javax.validation.constraints.Max;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Past;
import javax.validation.constraints.Positive;
import javax.validation.constraints.Size;
import org.springframework.format.annotation.DateTimeFormat;
public class Student {
@NotEmpty(message = "{validation.name.NotEmpty}")
@Size(min = 2, max = 50, message = "{validation.name.Size}")
private String name;
@NotNull(message = "{validation.age.NotNull}")
@Positive(message = "{validation.age.Positive}")
@Max(value = 18, message = "{validation.age.Maximum}")
private Integer age;
@NotEmpty(message = "{validation.email.NotEmpty}")
@Email(message = "{validation.email.Type}")
private String email;
@NotEmpty(message = "{validation.subjects.NotEmpty}")
private List <String> subjects;
@NotNull(message = "{validation.birthDate.NotNull}")
@Past(message = "{validation.birthDate.Past}")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate birthDate;
@NotEmpty(message = "{validation.gender.NotEmpty}")
private String gender;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public LocalDate getBirthDate() {
return birthDate;
}
public void setBirthDate(LocalDate birthDate) {
this.birthDate = birthDate;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public List <String> getSubjects() {
return subjects;
}
public void setSubjects(List <String> subjects) {
this.subjects = subjects;
}
}
This is the code by adding Lombok annotation.
↓
package com.reytech.demo.model;
import java.time.LocalDate;
import java.util.List;
import javax.validation.constraints.Email;
import javax.validation.constraints.Max;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Past;
import javax.validation.constraints.Positive;
import javax.validation.constraints.Size;
import org.springframework.format.annotation.DateTimeFormat;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class Student {
@NotEmpty(message = "{validation.name.NotEmpty}")
@Size(min = 2, max = 50, message = "{validation.name.Size}")
private String name;
@NotNull(message = "{validation.age.NotNull}")
@Positive(message = "{validation.age.Positive}")
@Max(value = 18, message = "{validation.age.Maximum}")
private Integer age;
@NotEmpty(message = "{validation.email.NotEmpty}")
@Email(message = "{validation.email.Type}")
private String email;
@NotEmpty(message = "{validation.subjects.NotEmpty}")
private List <String> subjects;
@NotNull(message = "{validation.birthDate.NotNull}")
@Past(message = "{validation.birthDate.Past}")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate birthDate;
@NotEmpty(message = "{validation.gender.NotEmpty}")
private String gender;
}
- @Getter and @setter will generate getters and setters according to each field.
- And, we will explain the most usable Lombok annotations which are:
Lombok annotation | Explanation |
---|---|
@data | It is all in one annotation which is equivalent to the combination of @Getter @setter @RequiredArgsConstructor @ToString @EqualsAndHashCode. |
@Value | It is all in one annotation which is equivalent to the combination of @Getter @FieldDefaults(makeFinal=true, level=AccessLevel.PRIVATE) @AllArgsConstructor @ToString @EqualsAndHashCode. |
@NoArgsConstructor | It is to generate default constructor with no arguments |
@RequiredArgsConstructor | It is to generate a constructor with required arguments |
@ AllArgsConstructor | It is to generate a constructor with all fields respectively |
@ToString | It is to generate the toString method automatically |
@RequiredArgsConstructor | It is to generate a constructor with required arguments |
@EqualsAndHashCode | It is to generate HashCode and equals implementations from the fields of your object. |
@builder | It is to generate the code automatically using Builder pattern for our class or constructor or method. |
Top comments (2)
Nice introduction.
I would suggest also adding the @Value annotation to your list. A lot like @Data, but instead it treats the object as immutable, so no setters, and some restriction on constructors and fields. I use it even more than @Data, to help keep a more clean object API that isn't polluted with unintended getters.
Thank you for your suggestion!