我有带有 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 实体上使用,因为实体 toString
、equals
和 hashCode
方法需要以非常具体的方式创作。参见 here了解详情。
关于java - Spring Boot Rest API 返回与 Lombok 一起使用的空 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62168522/