java - 如何在 Spring Boot 中自定义 JSON 响应?

标签 java json spring spring-boot jackson

我是 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/

相关文章:

forms - 避免 spring <form :input path ="var"/> for int variable 中的默认值

java - Spring:从Spring Boot服务连接Sql服务器

java - 调整大小后如何使用 LWJGL3 将 LibGDX 中的窗口居中

java - 无法启动Activity(包含 fragment 间通信)

java - SimpleDateFormat 和解析 : parse doesn't fail with wrong input string date

sql - 将 JSON 列更改为 INTEGER[] ARRAY

javascript - 如何处理 JSON javascript post 的 500 错误?

jquery - Spring JSON 和 406 HTTP 错误

java - Spring Data,获取行ManyToOne/OneToMany关系?

java - 为 @ElementCollection 自动生成 add() 和 remove() 方法