簡體   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