0

私はspring boot v1.2.3をfasterxml jackson注釈とともに使用しており、兄弟コレクション全体を単一のJSON応答に公開しようとしていますが、正しい注釈とミステリーを使用して、追加されたコレクションを応答に入れることができないようですコード。

誰かが問題を誤解するのを手伝ってくれますか?

それがSpring Boot内の何かが原因なのか、それとも単に注釈間の構成が間違っているのかはわかりません。子データベースから json にコレクションを追加したいと思います。

@Entity
@Table(name = "station")
public class Station implements Serializable {



    @OneToMany(mappedBy = "station", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
    private Set<StationTank> stationTanks;

    @JsonManagedReference("station-tank")
    public Set<StationTank> getStationTanks() {

        System.out.println("get tank count: " + stationTanks.size());
        return stationTanks;
    }

    public void setStationTanks(Set<StationTank> stationTanks) {

        System.out.println("set tank count: " + stationTanks.size());

        this.stationTanks = stationTanks;
    }


}



@Entity
@Table(name = "station_tank")
public class StationTank implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "station_tank_id")
    private long stationTankId;


    @Column(name = "active",nullable=true, columnDefinition="Boolean default false")
    private Boolean active;


    @ManyToOne(cascade = CascadeType.ALL, optional = false) // as defined in schema
    @JoinColumn(name = "station_id")
    private Station station;


    @JsonBackReference("station-tank")
    public Station getStation() {
        return station;
    }

    public void setStation(Station station) {
        this.station = station;
    }

}

この URL を呼び出すと、応答に兄弟コレクションが追加されていないため、応答に兄弟コレクションが必要です。 http://localhost:8080/stations/1

{
    "stationId": 1,
    "stationName": "station name 1",
    "active": true,
    "_links":
    {
        "self":
        {
            "href": "http://localhost:8080/stations/1"
        },
        "stationTanks":
        {
            "href": "http://localhost:8080/stations/1/stationTanks"
        }
    }
}

しかし、兄弟コレクションの URL を呼び出すと、兄弟コレクションが正常に取得されます。上記の応答で兄弟コレクションが必要なだけです。

{
    "_embedded":
    {
        "station_tanks":
        [
            {
                "stationTankId": 1,
                "active": true,
                "_links":
                {
                    "self":
                    {
                        "href": "http://localhost:8080/station_tanks/1"
                    },
                    "station":
                    {
                        "href": "http://localhost:8080/station_tanks/1/station"
                    }
                }
            },
            {
                "stationTankId": 2,
                "active": true,
                "_links":
                {
                    "self":
                    {
                        "href": "http://localhost:8080/station_tanks/2"
                    },
                    "station":
                    {
                        "href": "http://localhost:8080/station_tanks/2/station"
                    }
                }
            }
        ]
    }
}
4

2 に答える 2

1

@JsonView(class)コントローラーメソッドで同じクラスで同じアノテーションを使用した後、フィールドまたはゲッターにアノテーションを付けることができます-より良い解決策であるか、予期しないフィールドにアノテーションを付けるだけです@JsonIgnore

ジャクソン構成の詳細はこちら

于 2015-07-03T18:33:23.770 に答える