java - Spring Boot Rest API 返回与 Lombok 一起使用的空 JSON

标签 java spring-boot rest lombok spring-rest

我有带有 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,它就可以正常工作。我如何在不添加 getters setter 的情况下获得响应的实际值,因为我正在使用 @Data 注释

最佳答案

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

阅读here关于使用 DTO 的优势。

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

移除@Data注解。

@Data 不应在 JPA 实体上使用,因为实体 toStringequalshashCode 方法需要以非常具体的方式创作。参见 here了解详情。

关于java - Spring Boot Rest API 返回与 Lombok 一起使用的空 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62168522/

相关文章:

java - 如何将 LMAX 集成到真实的金融应用程序中

java - JPA 存储库方法 List<Integer> 返回结果为 List<BigDecimal> 为什么?

java - REST API 查询返回 404?

java - jpa-springEntitymanager.find超时不起作用

java - 使移动应用程序中的内容动态化

rest - HTTP/Rest 找出服务器上可用的内容类型

java - ScheduledExecutorService 只调用一个线程

java 测量方法调用率

java - 使用 @OneToMany 或 @ManyToMany 来针对发生的未映射类异常

javascript - 如何创建一个将参数传递给 REST Web 服务的 Controller