

SpringToolSuite4でjavaの勉強しているところです。  
lombok @Data を使って自動的にGetter,Setterなどを追加しようとしています。  
しかしながら、コントローラーにはGetterがサジェストされず、

[![画像の説明をここに入力](https://i.stack.imgur.com/BNR85.png)](https://i.stack.imgur.com/BNR85.png)

そのままブラウザからアクセスしてもエラーになります。  
`Unresolved compilation problem: メソッド getName() は型 User で未定義です`

クラスの定義は次のコードで `@Data` を指定しています。

[code]

    package com.example.demo.models;
    
    import javax.validation.constraints.Email;
    import javax.validation.constraints.NotBlank;
    import javax.validation.constraints.Size;
    
    import java.io.Serializable;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    import lombok.Data;
    
    @Data
    @Entity
    @Table(name = "user")
    public class User implements Serializable {
        private static final long serialVersionUID = -6647247658748349084L;
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private long id;
    
        @NotBlank
        @Size(min = 3, max = 10)
        private String name;
    
        @NotBlank
        @Email
        private String mail;
    
        @Size(max = 400)
        private String introduction;
        
        @NotBlank
        @Size(min = 3, max = 20)
        private String nickname;
    
        public void clear() {
            name = null;
            mail = null;
            introduction = null;
            nickname = null; 
        }
    }
    
[/code]

メインコントローラーは次のような形で呼び出しています。

[code]

        @GetMapping("/form3")
        public String form3(User user) {
            String nameString = user.getName();
            //略
            return "root/form3";
        }
    
[/code]

lombokの公式ページを見ても、上記の設定良いように思えます。  
<https://projectlombok.org/features/Data>

何が問題になっているのか、教えて頂けますでしょうか。  
よろしくお願いします。

【追記：2022-06-23】  
nameの部分を下記のように同じlombokのGetterとSetterを追加してみました。  
importも追加済みです。

[code]

        @NotBlank
        @Getter
        @Setter
        @Size(min = 3, max = 10)
        private String name;
    
[/code]

しかしながら、Controller の方で見ると表示されません。  
これはIDEかlombookが正しく動作できていない用に思えます。

回答のコメントにも書きましたが、lombokの再インストールは実行済みです。  
[![画像の説明をここに入力](https://i.stack.imgur.com/rCfQK.png)](https://i.stack.imgur.com/rCfQK.png)  
※利用できるメソッド内にgetter,setterが表示されない

【追記：2022-06-24】  
次のようにコードを書いてみたところ「未定義」との警告は出ていますが、  
コンパイラも通り、エラーもなく実行されました。  
ということは、getter,setterはつくられているということですね。  
[![画像の説明をここに入力](https://i.stack.imgur.com/NHm07.png)](https://i.stack.imgur.com/NHm07.png)

しかし、不思議なことにデバッグでステップインをしてみると  
全くコードがないところに移動します。  
[![画像の説明をここに入力](https://i.stack.imgur.com/75jS6.png)](https://i.stack.imgur.com/75jS6.png)  
spring tool suite が正しく動作していない…と見るべきなのでしょうか？


CC BY-SA 4.0
2022-06-21T14:30:36.830
89509
2023-11-13T12:00:50.077
2022-06-23T23:54:00.257
7980
7980
question
java spring-boot
lombok @Data で Getter が作成されていない？


[SpringToolSuite4(STS)にlombokをインストールする](https://projectlombok.org/setup/eclipse)必要があります。

[Windows10 に Java/Spring Boot
開発環境をセットアップする](https://zenn.dev/yukihane/articles/fb52d049da587c#spring-
tools-4-for-
eclipse\(sts\)-%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB-%26-%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97)
から引用します:

>   1. STS を終了させます。
>   2. <https://projectlombok.org/download> から lombok.jar をダウンロードします。
>   3. `java -jar ~/Downloads/lombok.jar` コマンドを実行し、インストーラを起動します。
>   4. `SpringToolSuite4.exe`(例:
> `C:\Users\yuki\Documents\opt\sts-4.12.1.RELEASE\SpringToolSuite4.exe`)
> の場所を指定して **Install/Upgrade** ボタンを押してインストールします。
>

STS へ lombok インストールを実行すると `SpringToolSuite4.ini` 最下行に
`-javaagent:/path/to/lombok.jar` という行が挿入されます。 `lombok.jar`
がこのパスに存在しているか確認してみてください。

また、[オフィシャルサイト](https://projectlombok.org/setup/eclipse)にある通り、 lombok
がインストールできていれば STS の About 画面(Help > About Spring Tool Suite 4)にも表れます。  
こちらも想定通り出力されているか確認してみてください。

![](https://projectlombok.org/img/eclipse-about.png)

* * *

質問の主題からは外れますが、一般的に `@Entity` に `@Data` を付与するのは誤りです(gette/setterが必要なら
`@Getter`, `@Setter` で対応すべきです)。

  * [JPA Entity には Lombok の @Data(@EqualsAndHashCode) を使用すべきでない – 発火後忘失](https://yukihane.github.io/blog/202107/31/dont-use-lombok-with-jpa/)


CC BY-SA 4.0
2022-06-22T00:36:19.367
89514
2022-06-28T09:54:15.117
2022-06-28T09:54:15.117
2808
2808
89509
answer


gradleを使っているのであれば  
build.gradleのdependenciesに以下を追加すればうまくいくと思います。

[code]

    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    
[/code]

※動作確認はIntelliJ IDEAを使いました。


CC BY-SA 4.0
2022-06-22T02:50:53.943
89519
2022-06-22T03:03:22.723
2022-06-22T03:03:22.723
35558
35558
89509
answer