Spring Boot Rest API 返回与 Lombok 一起使用的空 JSON
Posted
技术标签:
【中文标题】Spring Boot Rest API 返回与 Lombok 一起使用的空 JSON【英文标题】:Spring Boot Rest API Returns Empty JSON Used with Lombok 【发布时间】:2020-09-21 21:31:10 【问题描述】:我有带有 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 添加到实体,它可以正常工作。如何在不添加 getter setter 的情况下获取实际值作为响应,因为我正在使用 @Data 注释
【问题讨论】:
您不需要同时使用 Getter 和 Data,Data 已经设置了您的 getter。实体也应该与 Table(name = "table_name" ) 注释一起使用。 您根本不应该在 JPA 类型上使用 @Data,因为需要正确处理“toString”、“equals”和“hashCode”。详情请看我的回答***.com/a/34299054/1331935。 【参考方案1】:首先,在 spring 中,直接从控制器返回实体对象以转换为 json 并不是一个好方法。使用 DTO 方法,以便您始终拥有从控制器端点返回的 DTO 对象。这样,您将可以更好地控制要从端点返回的数据的类型和结构。
阅读here 了解使用 DTO 的优势。
其次,验证您的表是否遵循基本的spring jpa
命名约定或与实体类名称相同,如果不是,请添加@Table(name="")
注释以指定表名。检查数据是否已填充到您的实体类中。
移除@Data
注解。
@Data
不应在 JPA 实体上使用,因为实体 toString
、equals
和 hashCode
方法需要以非常具体的方式编写。详情请见here。
【讨论】:
感谢您的回答,它帮助我理解了标准实现。 实体是否从数据库中检索数据?从控制器返回时,您的实体类是否有任何数据?你能分享你的代码吗? 如果我添加 getter 和 setter 就可以了。我在添加那些我得到所需输出后检查。 您根本不应该在 JPA 类型上使用 @Data,因为需要正确处理“toString”、“equals”和“hashCode”。详情请看我的回答***.com/a/34299054/1331935。我会更新这个答案。【参考方案2】:经过大量搜索并查看我的问题的答案后找到了解决方案。 如果我使用 cmd 中的 java -jar 运行我的 Spring Boot 应用程序,它可以正常工作。但不是 IDE,所以问题出在 IDE 配置上。
我正在使用 Eclipse IDE
右键单击您的项目 -> 属性
然后从属性窗口
Java 编译器 -> 注解处理 -> 启用注解处理
应选中此选项,然后处理注释。我从 Tinku 对这个问题的回答中关注了https://www.baeldung.com/lombok-ide。
【讨论】:
【参考方案3】:需要在maven或gradle文件链接How to configure Lombok with maven-compiler-plugin?中添加Lombok插件。 如果您使用的是 IDE 则需要安装 Lombok 插件链接https://www.baeldung.com/lombok-ide
【讨论】:
【参考方案4】:如果您使用 Eclipse,请检查是否安装了 Lombok:
【讨论】:
以上是关于Spring Boot Rest API 返回与 Lombok 一起使用的空 JSON的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Boot REST API 中格式化返回的 json?
无法让spring boot hibernate rest api返回一对多关系
如何使用 Spring Boot 应用程序从 Rest API 返回 html
如何在 Spring Boot Rest API 中以 XML 形式返回对象列表