首页 > 解决方案 > Spring Boot Rest API 返回与 Lombok 一起使用的空 JSON

问题描述

我有带有 Web、JPA、H2、Web、Lombok 依赖项的 Spring Boot 应用程序。我有以下实体

@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的情况下获得实际值作为响应

标签: javaspring-bootrestlombokspring-rest

解决方案


首先,在 spring 中,直接从控制器返回实体对象以转换为 json 并不是一个好方法。使用 DTO 方法,以便您始终拥有从控制器端点返回的 DTO 对象。这样,您将可以更好地控制要从端点返回的数据的类型和结构。

阅读此处了解使用 DTO 的优势。

其次,验证您的表是否遵循基本spring jpa命名约定或与实体类名称相同,如果不是,请添加@Table(name="")注释以指定表名。检查数据是否填充到您的实体类中。

删除@Data注释。

@Data不应在 JPA 实体上使用 Entity toString, equals, 和hashCode方法需要以非常具体的方式创作。有关详细信息,请参见此处


推荐阅读