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

问题描述 投票:0回答:2

我有一个带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;

}

我在书本REST端点的reposose中得到了以下JSON信息

[
    {},
    {}
]

如果我向实体添加getter和setter,就能正常工作。我如何才能在不添加getters setters的情况下获得响应中的实际值,因为我正在使用@Data注解。

java spring-boot rest lombok spring-rest
2个回答
2
投票

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

读取 此处 关于使用DTO的优势。

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

移除 @Data 注解。

@Data 不应使用在JPA实体上,因为Entity toString, equalshashCode 方法需要以一种非常特殊的方式进行编写。请看 此处 以了解详情。


1
投票

需要在maven或gradle文件中添加Lombok插件的链接。如何用maven-compiler-plugin配置Lombok?如果你使用的是IDE,那么需要安装Lombok插件链接。https:/www.baeldung.comlombok-ide


1
投票

经过大量的搜索和寻找问题的答案,我找到了一个解决方案。java -jar 从cmd中可以正常工作,但在IDE中不行,所以问题出在IDE的配置上。但是在IDE中不行,所以问题出在IDE的配置上。

我使用的是Eclipse IDE

在您的项目上点击右键 -> 属性

然后从属性窗口

Java编译器 -> 注释处理 -> 启用注释处理

这个选项应该被选中,然后注释被处理。我按照 https:/www.baeldung.comlombok-ide 从丁库对这个问题的回答来看。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.