簡體   English   中英

Spring Boot使用傑克遜更改JSON響應結構

[英]Spring-boot change the json response structure with jackson

我正在使用Spring Boot REST,我想在序列化過程中更改JSON響應的結構。
我有以下型號:
標題.java

@Entity
public class Title {
    private Short id;
    private String name;
    private Collection<TitleCelebrity> titleCelebrities;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    public Short getId() {
        return id;
    }

    public void setId(Short id) {
        this.id = id;
    }

    @Basic
    @Column(name = "name")
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @OneToMany(mappedBy = "title")
    public Collection<TitleCelebrity> getTitleCelebrities() {
        return titleCelebrities;
    }

    public void setTitleCelebrities(Collection<TitleCelebrity> titleCelebrities) {
        this.titleCelebrities = titleCelebrities;
    }
}

TitleCelebrity.java

@Entity
@Table(name = "title_celebrity")
public class TitleCelebrity {
    private TitleCelebrityPK id;
    private String characterName;
    private Title title;
    private TitleCelebrityType titleCelebrityType;

    @EmbeddedId
    @JsonIgnore
    public TitleCelebrityPK getId() {
        return id;
    }

    public void setId(TitleCelebrityPK id) {
        this.id = id;
    }

    @Basic
    @Column(name = "character_name")
    public String getCharacterName() {
        return characterName;
    }

    public void setCharacterName(String characterName) {
        this.characterName = characterName;
    }

    @MapsId("titleByTitleId")
    @ManyToOne
    @JoinColumn(name = "title_id", referencedColumnName = "id", nullable = false)
    @JsonIgnore
    public Title getTitle() {
        return title;
    }

    public void setTitle(Title title) {
        this.title = title;
    }

    @MapsId("titleCelebrityTypeByTitleCelebrityTypeId")
    @ManyToOne
    @JoinColumn(name = "title_celebrity_type_id", referencedColumnName = "id", nullable = false)
    public TitleCelebrityType getTitleCelebrityType() {
        return titleCelebrityType;
    }

    public void setTitleCelebrityType(TitleCelebrityType titleCelebrityType) {
        this.titleCelebrityType = titleCelebrityType;
    }
}  

TitleCelebrityType.java

@Entity
@Immutable
@Table(name = "title_celebrity_type")
public class TitleCelebrityType {
    private Short id;
    private String name;
    private Collection<TitleCelebrity> titleCelebrities;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    public Short getId() {
        return id;
    }

    public void setId(Short id) {
        this.id = id;
    }

    @Basic
    @Column(name = "name")
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @OneToMany(mappedBy = "titleCelebrityType")
    @JsonIgnore
    public Collection<TitleCelebrity> getTitleCelebrities() {
        return titleCelebrities;
    }

    public void setTitleCelebrities(Collection<TitleCelebrity> titleCelebrities) {
        this.titleCelebrities = titleCelebrities;
    }
}

因此,當我請求獲取標題時,JSON響應如下所示:

{
    "id": 1,
    "name": "Vertigo",
    "titleCelebrities": [
            {
                "characterName": "John 'Scot",
                "titleCelebrityType": {
                    "id": 1,
                    "name": "Cast"
                }
            },
            {
                "characterName": "Madeleine ",
                "titleCelebrityType": {
                    "id": 1,
                    "name": "Cast"
                }
            },
            {
                "characterName": "a",
                "titleCelebrityType": {
                    "id": 2,
                    "name": "Director"
                }
            },
            {
                "characterName": "b",
                "titleCelebrityType": {
                    "id": 3,
                    "name": "Writer"
                }
            },
            {
                "characterName": "c",
                "titleCelebrityType": {
                    "id": 3,
                    "name": "Writer"
                }
            }
        ]
}

反正有沒有更改POJO類(模型)使其看起來像這樣嗎?

{
    "id": 1,
    "name": "Vertigo",
    "titleCelebrities": [
        {
            "cast": {
                "characterName": "John 'Scot",
                "characterName": "Madeleine ",
            },
            "director": {
                "characterName": "a",
            },
            "writer": {
                "characterName": "b",
                "characterName": "c",
            }
        },
    ]
}

您可以使用DTO

要將數據封裝在可以通過網絡傳輸的值對象中,請執行以下操作:數據傳輸對象。 詳細DTO

您也可以使用推土機:

Dozer是Java Bean到Java Bean的映射器,可將數據從一個對象遞歸復制到另一個對象。 在細節推土機

如何在Spring Boot中使用推土機
推土機注釋映射文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM