繁体   English   中英

如何在 Spring 引导中自定义 JSON 响应?

[英]How to customize JSON responses in Spring Boot?

我是 Java 和 Spring 引导的新手。 我正在使用 Spring 引导创建 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-ish。 有没有办法我可以编写另一个 POJO 来给我这个结果?

制作两层:一层是 MySQL POJO model 和另一层 model (DTO),用于传递 Z50780F47F568 的响应 when you fetch the data from the MySQL POJO model and use a mapper class to convert the data from MySQL POJO model to DTO model and send the DTO model as a response. 在 DTO model 中,我们可以使用有助于设计 JSON 响应的注释。

例如:LocalDataTime 变量将在响应中为您提供一个很长的详细格式,因为我们使用序列化程序(注释)来格式化它

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM