我有一个带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注解。
首先,在spring中,直接从控制器中返回实体对象来转换为json不是一个好方法。使用DTO方法,这样你将始终有一个从控制器端点返回的DTO对象。这样你就可以对你想从端点返回的数据类型和结构有更多的控制。
读取 此处 关于使用DTO的优势。
其次,验证您的表格是否遵循基本的 spring jpa
命名惯例,或与实体类名称相同,如果不是,请添加以下内容 @Table(name="")
注解来指定表名。检查数据是否被填充到你的实体类中。
移除 @Data
注解。
@Data
不应使用在JPA实体上,因为Entity toString
, equals
和 hashCode
方法需要以一种非常特殊的方式进行编写。请看 此处 以了解详情。
需要在maven或gradle文件中添加Lombok插件的链接。如何用maven-compiler-plugin配置Lombok?如果你使用的是IDE,那么需要安装Lombok插件链接。https:/www.baeldung.comlombok-ide
经过大量的搜索和寻找问题的答案,我找到了一个解决方案。java -jar 从cmd中可以正常工作,但在IDE中不行,所以问题出在IDE的配置上。但是在IDE中不行,所以问题出在IDE的配置上。
我使用的是Eclipse IDE
在您的项目上点击右键 -> 属性
然后从属性窗口
Java编译器 -> 注释处理 -> 启用注释处理
这个选项应该被选中,然后注释被处理。我按照 https:/www.baeldung.comlombok-ide 从丁库对这个问题的回答来看。