簡體   English   中英

Spring 引導 Rest API 返回空 Z0ECD11C1D7A287401D148A2kBBD7A2 已使用

[英]Spring Boot Rest API Returns Empty JSON Used with Lombok

我有 Spring 啟動應用程序與 Web、JPA、H2、ZC6E190B2846433C48EZ39E5C6Z 依賴項。 我有以下實體

@NoArgsConstructor
@AllArgsConstructor
@Data
@Entity
@Getter
public class Book {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false)
    private String name;

    @Column(nullable = false)
    private Integer pageCount;

    @ManyToOne
    @JoinColumn(name = "author_id")
    private Author author;

}
@NoArgsConstructor
@AllArgsConstructor
@Data
@Entity
@Getter
public class Author {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false)
    private String firstName;

    @Column
    private String lastName;

}

我正在關注 /books REST 端點的 JSON

[
    {},
    {}
]

如果我將 getter 和 setter 添加到實體,它工作正常。 當我使用@Data注釋時,如何在不添加getter setter的情況下獲得實際值作為響應

首先,在 spring 中,直接從 controller 返回實體 object 以轉換為 ZDFCDA4D6466DEEC7FECDF25 不是一個好方法。 使用 DTO 方法,以便您始終擁有從 controller 端點返回的 DTO object。 這樣,您將可以更好地控制要從端點返回的數據的類型和結構。

閱讀此處了解使用 DTO 的優勢。

其次,驗證您的表是否遵循基本的spring jpa命名約定或與實體 class 名稱相同,如果沒有,請添加@Table(name="")注釋。 檢查數據是否填充到您的實體類中。

刪除@Data注釋。

@Data不應在 JPA 實體上使用,因為實體toStringequalshashCode方法需要以非常特定的方式編寫。 有關詳細信息,請參見此處

經過大量搜索並查看了我的問題的答案后,找到了解決方案。 如果我使用 cmd 中的java -jar運行我的 spring 啟動應用程序,它工作正常。 但不是 IDE 所以問題是 IDE 配置。

我正在使用 Eclipse IDE

右鍵單擊您的項目->屬性

然后從屬性 window

Java 編譯器->注解處理->啟用注解處理

應選中此選項,然后處理注釋。 我從 Tinku 對這個問題的回答中關注了https://www.baeldung.com/lombok-ide

在此處輸入圖像描述

需要在 maven 或 gradle 文件鏈接中添加 Lombok 插件如何使用 maven-compiler-plugin 配置 Lombok? . 如果您使用的是 IDE 則需要安裝 Lombok 插件鏈接https://www.baeldung.com/lombok-ide

如果您使用的是 Eclipse,請檢查是否安裝了 Lombok:

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM