web-dev-qa-db-fra.com

Comment utiliser l'annotation lombok.Data dans une application Spring Boot?

J'ai utilisé l'annotation @Data dans ma classe POJO mais les getters et les setters ne sont pas générés.

//User POJO Class
import lombok.Data;

@Data
public class UserVo {

    private String name;
    private String userName;
    private String email;
    private String mobile;
    private String password;
}
<!-- pom.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.aptitest</groupId>
    <artifactId>wt-online-test-backend</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>wt-online-test-backend</name>
    <description>Online Aptitude Test</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <Java.version>1.8</Java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>1.9.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.6</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.restdocs</groupId>
            <artifactId>spring-restdocs-mockmvc</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>
13
Deepanshu

Le problème ici est probablement lié à votre capacité à vérifier si des getters/setters ont bien été générés.

  1. Si votre IDE vous indique que les getters/setters ne sont pas générés - le IDE est peut-être incorrect. Il peut ne pas choisir que des getters/setters ont été générés; Pour votre IDE - assurez-vous d’avoir les plugins pertinents pour cela. Ceci est probablement votre problème car vous mentionnez STS . Essayez l'un des liens pertinents pour votre cas:

  2. Utilisez la construction Maven indépendante de l'IDE pour vous assurer que Lombok génère ce qu'il est censé générer.

5
Witold Kaczurba
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
</dependency>

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>
4
Babu

Tout d'abord, vous n'avez pas besoin d'ajouter @Setter et @Getter. @Data inclut ces deux.
Deuxièmement, vous devez ajouter le plug-in Lombok à votre IDE (recherchez le plug-in Lombok pour STS ou l'activation du processeur Annotation pour STS). Lorsque vous le faites, vous ne voyez pas vraiment les getters et les setters générés dans votre IDE. Cela vous aidera à résoudre les erreurs de compilation dans votre IDE. c'est tout.

1
pvpkiran

Lombok est un processeur d'annotation - il dispose d'un accès complet à l'arbre source généré. Alors que les processeurs d'annotation génèrent généralement de nouveaux fichiers source, Lombok modifie ceux existants en ajoutant de nouveaux champs ou méthodes.

Lombok fournit de nombreuses annotations. (Voir Liste complète )

Pour répondre à la question: les annotations de Lombok ne génèrent pas le code en temps de développement. Cela se produit uniquement lorsque le compilateur Java génère un arbre source abstrait. Donc, ne vous attendez pas à ce que le code change comme par magie lorsque vous ajoutez une annotation.

Cependant, vous devez les résoudre dans votre IDE spécifique afin que toutes les dépendances et les importations soient correctement ajoutées. Vous trouverez ci-dessous les moyens de résoudre les annotations de Lombok dans votre environnement de développement préféré. Vous pouvez également choisir un projet Maven et le résoudre également ( Projet Lombok Maven repository ).

Idée IntelliJ

1) Activer le traitement des annotations

Fichier -> Paramètres -> Construire, Exécution, Déploiement -> Compilateur -> Processeurs d'annotation -> (Cochez la case correspondant à l'image donnée Ci-dessous)

 Enable Annotation Processor

2) Installer/Mettre à jour le plugin Lombok ( voir ceci )

Fichier -> Paramètres -> Plugins -> Rechercher un plugin Lombok -> Mettre à jour ou Installer

Éclipse

Suivez ces étapes dans ce lien .

0
Keet Sugathadasa

Vous devez également ajouter Lombok aus en tant qu’agent à votre IDE. Voir https://projectlombok.org/download.html pour plus de détails.

0
daniel.eichten

Dans mon cas, la classe générée avait lombok généré des getters/setters sur ma classe d'entité. Mais je continuais à obtenir des valeurs nulles liées pour tous les champs de mon entité, à l'exception du champ @Id. J'utilise gradle not maven.

Pour moi, le problème a été d'installer le plug-in Lombok dans IntelliJ CE IDE et d'activer le traitement des annotations pour le projet IDE /.

Après cela je suis capable de persister mon entité très bien! 

0
Farrukh Najmi

Spring Tool Suite IDE est basé sur Eclipse. 

De la documentation officielle de Lombok: https://projectlombok.org/download.html

Eclipse et variantes - Exécutez lombok.jar en tant qu’application Java (double-cliquez dessus, généralement) pour l’installer. Ajoutez également lombok.jar à votre projet. Variantes prises en charge: Suite d'outils Springsource, JBoss Developer Studio

Si cela ne fonctionne toujours pas, cette discussion sur le dépassement de capacité peut vous aider:

comment configurer Lombok dans Eclipse Luna

0
PiroXXI