Próbuję zwrócić listę tras z mojej bazy danych postgres. Kiedy uderzyłem do mojego punktu końcowego listę, które mają 2 podmioty, wychodzi, ale z problemem, drugi element na liście nie ma swojego pochodzenia Objet jako pierwszy. Oto JSON:

[
{
    "id": 1,
    "weekDay": "Terça-Feira",
    "travel": 1,
    "origin": {
        "id": 1,
        "placeName": "Prefeito Mario de Menezes, Avenida",
        "placeNumber": 1,
        "placeZone": 1,
        "geom": null,
        "x": -23.266556,
        "y": -51.038334,
        "lastUpdate": 1583809200000,
        "registerDate": 1583809200000,
        "disabled": false
    },
    "startTime": "08:00 - 08:29",
    "destiny": {
        "id": 2,
        "placeName": "Ronat Valter Sodré, Rua",
        "placeNumber": 2,
        "placeZone": 2,
        "geom": null,
        "x": -23.274357,
        "y": -51.060287,
        "lastUpdate": 1583809200000,
        "registerDate": 1583809200000,
        "disabled": false
    },
    "arrivalTime": "08:00 - 08:29",
    "morador": {
        "id": 1,
        "gender": "Masculino",
        "defic": false,
        "ageRange": "20 Anos",
        "schooling": "Graduado",
        "occupation": "Assalariado",
        "place": 1,
        "lastUpdate": 1583895600000,
        "registerDate": 1583895600000,
        "disabled": false
    },
    "reason": "Lazer",
    "travelMode": "Moto (como motorista)",
    "geom": null,
    "lastUpdate": 1584561952039,
    "registerDate": 1584414000000,
    "disabled": false
},
{
    "id": 475,
    "weekDay": "Quarta-Feira",
    "travel": 475,
    "origin": 1, // THIS NEED TO BE AN OBJECT OF "PLACE"!!!
    "startTime": "18:30 - 18:59",
    "destiny": {
        "id": 81,
        "placeName": "PR 090",
        "placeNumber": 81,
        "placeZone": 81,
        "geom": null,
        "x": -23.27377,
        "y": -51.030827,
        "lastUpdate": 1583809200000,
        "registerDate": 1583809200000,
        "disabled": false
    },
    "arrivalTime": "19:00 - 19:29",
    "morador": {
        "id": 1,
        "gender": "Masculino",
        "defic": false,
        "ageRange": "20 Anos",
        "schooling": "Graduado",
        "occupation": "Assalariado",
        "place": 1,
        "lastUpdate": 1583895600000,
        "registerDate": 1583895600000,
        "disabled": false
    },
    "reason": "Trabalho",
    "travelMode": "Carro (como motorista)",
    "geom": null,
    "lastUpdate": 1584554752290,
    "registerDate": 1584414000000,
    "disabled": false
}
]

Moje modele to: trasa:

@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
@Entity(name = "od_routes")
@Where(clause = "disabled= false")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class Route {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column
    private String weekDay;

    @Column
    private int travel;

    @ManyToOne(fetch = FetchType.LAZY)
    private Logradouro origin;

    @Column
    private String startTime;

    @ManyToOne(fetch = FetchType.LAZY)
    private Logradouro destiny;

    @Column
    private String arrivalTime;

    @ManyToOne(fetch = FetchType.LAZY)
    private Dweller dweller;

    @Column
    private String reason;

    @Column
    private String travelMode;

    @Column
    private Geometry geom;

    @Column
    private Date lastUpdate;

    @Column
    private Date registerDate;

    @Column
    private boolean disabled;
}

Mieszkaniec:

 @Entity(name = "od_dweller")
 @Where(clause = "disabled = false")
 @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
 public class Dweller {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column
    private String gender;

    @Column
    private boolean defic;

    @Column
    private String ageRange;

    @Column
    private String schooling;

    @Column
    private String occupation;

    @ManyToOne
    private Place place;

    @Column
    private Date lastUpdate;

    @Column
    private Date registerDate;

    @Column
    private boolean disabled;
}

Miejsce:

@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
@Entity(name = "od_places")
@Where(clause = "disabled = false")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class Place {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column
    private String placeName;

    @Column
    private int placeNumber;

    @Column
    private int placeZone;

    @Column
    private Geometry geom;

    @Column
    private float x;

    @Column
    private float y;

    @Column
    private Date lastUpdate;

    @Column
    private Date registerDate;

    @Column
    private boolean disabled;
}

Czy robię coś źle? (Kod został przetłumaczony, jeśli niektóre nazwy są błędne, to tylko błąd tłumaczenia)

0
Alfredo Marin 19 marzec 2020, 00:07

1 odpowiedź

Najlepsza odpowiedź

Wystarczy usunąć @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id") z klasy {x1}}. Myślę, że nie będzie to złamać niczego, ponieważ nie ma okrągłe odniesienia do tej klasy

Możesz przeczytać o tym zachowaniu tutaj

https://github.com/fasterxml/jackson-docs/wiki/presentation-jackson-2.0.

Sposób postępowań @jsonidentityInfo jest następujący:

  • Identyfikator obiektu jest zawsze włączony jako właściwość (z konfigurowalną nazwą). Oznacza to, że kształt wyjściowy musi być obiektem JSON; i to znaczy Obecnie nie może być tożsamość zbiorów Java, tablice i map obsługiwane

  • Pierwsza instancja obiektu jest całkowicie serializowana (w tym identyfikator obiektu); Dalsze odniesienia są serializowane za pomocą samego identyfikatora obiektu

  • Identyfikatory obiektów można wygenerowane (Jackson tworzy identyfikatory na muchę), jako liczby UUID lub sekwencji (ints); lub pod warunkiem, w takim przypadku Sam obiekt zapewnia wartość przez właściwość (wartość pola lub getter).

0
Community 20 czerwiec 2020, 09:12