我是 Java 和 Spring Boot 新手。我正在使用 Spring Boot 创建 REST 服务。我有一个实体,其中仅包含对其他实体的引用,如下所示:
@Entity
@Table(name = "table_xyz")
public class RolesAccessEntity {
@Id
@Column(name = "id", columnDefinition = "serial")
private int id;
@ManyToOne
@JoinColumn(name = "role_id", referencedColumnName = "id")
private RoleEntity roleEntity;
@ManyToOne
@JoinColumn(name = "page_id", referencedColumnName = "id")
private PagesEntity pagesEntity;
@ManyToOne
@JoinColumn(name="column_id", referencedColumnName = "id")
private ColumnsEntity columnsEntity;
}
我必须获取全部内容并返回 REST 响应。当我使用 Jackson 将 POJO 放入 ObjectNode 中时,我得到如下响应:
{
"success": true,
"values": [
{
"id": 32,
"roleEntity": {
"id": 15,
"roleName": "Role1"
},
"pagesEntity": {
"id": 1,
"pageName": "Page1"
},
"columnsEntity": {
"id": 1,
"columnName": "Column1"
}
},
{
"id": 33,
"roleEntity": {
"id": 15,
"roleName": "Role1"
},
"pagesEntity": {
"id": 1,
"pageName": "Page1"
},
"columnsEntity": {
"id": 2,
"columnName": "Column2"
}
},
{
"id": 34,
"roleEntity": {
"id": 15,
"roleName": "Role1"
},
"pagesEntity": {
"id": 1,
"pageName": "Page1"
},
"columnsEntity": {
"id": 3,
"columnName": "Column3"
}
}
]
}
但是,我如何将事物组合在一起?像这样:
{
"success": true,
"values":
[
{
"id": 32,
"roleEntity": {
"role_id": 15,
"roleName": "Role1",
"values": [
{"page_id": 1,
"page_name": "Page1",
"values": [
{
"column_id": 1,
"column_name": "Column1"
},
{
"column_id": 2,
"column_name": "Column2"
}
]
},
{"page_id": 2,
"page_name": "Page2",
"values": [
{
"column_id": 3,
"column_name": "Column1"
},
{
"column_id": 4,
"column_name": "Column2"
}
]
}
]}}]}
我可能可以通过编写大量嵌套代码来在服务和组中编写一个 HashMap 来获得它。但感觉不太像 Java 风格。有没有办法我可以编写另一个 POJO 来给我这个结果?
最佳答案
制作两层:一层是 MySQL POJO 模型,另一层是用于传递 REST 响应的模型 (DTO)。当您从 MySQL POJO 模型获取数据并使用映射器类将数据从 MySQL POJO 模型转换为 DTO 模型并将 DTO 模型作为响应发送时。在DTO模型中,我们可以使用注释来帮助设计JSON响应。
例如: LocalDataTime 变量将在响应中为您提供详细的格式,我们使用序列化器(注释)对其进行格式化
关于java - 如何在 Spring Boot 中自定义 JSON 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58120244/