Как отобразить вложенный объект JSON как строку таблицы SQL в Spring Boot - PullRequest
0 голосов
/ 07 апреля 2020

Я использую Spring для разработки API вместе с JPA. Я обрабатываю POST запрос, который принимает @RequestBody как JSON объект, который выглядит следующим образом -

{
  "id": "323",
  "name": "Sam",
  "gpsLocation": {
    "latitude": 66.7492558,
    "longitude": 97.133258
  }
}

И SQL User Таблица, которая имеет следующие столбцы-

id | name | latitude | longitude

Есть ли способ Spring для сопоставления этого вложенного json объекта непосредственно с этими столбцами таблицы?

Это то, что мои User.java и GpsLocation.java классы сущностей выглядят прямо сейчас -

@Table(name = "user")
@Entity
public class UnderObservation {

    @Column(name = "name", nullable = false)
    private String name;

    @Id
    @Column(name = "id", nullable = false)
    private String userID;

    private GpsLocation location;
}


@Entity
public class GpsLocation {

    @Column(name = "Latitude", nullable = false)
    private Double Latitude;

    @Column(name = "Longitude", nullable = false)
    private Double Longitude;

}

Я ищу способ "сплющить / развернуть" класс GpsLocation, чтобы он непосредственно вписывался в таблицу User вместо того, чтобы иметь отдельный таблица для GpsLocation.

Я не могу изменить структуру JSON, потому что некоторые другие базы данных SQL используют это. Кроме того, я новичок в весне!

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020

Попробуйте с помощью конструктора :

        @Getter
        @Setter
        @Table(name = "user")
        @Entity
        public class UnderObservation {

            @Column(name = "name", nullable = false)
            private String name;

            @Id
            @Column(name = "id", nullable = false)
            private String userID;

            @Column(name = "latitude", nullable = false)
            private Double latitude;

            @Column(name = "longitude", nullable = false)
            private Double longitude;

            private GpsLocation location;


            UnderObservation(String name, String userID, GpsLocation location) {
                this.name = name;
                this.userID = userID;
                this.location = location;

                this.latitude = this.location.getLatitude();
                this.longitude = this.location.getLongitude();
            }




        }
0 голосов
/ 07 апреля 2020

В этом случае рекомендуется использовать DTO объект передачи данных, который содержит request body и сопоставляет его с user объектом, используя внешнюю библиотеку, такую ​​как mapstruct, ObjectMapper или даже вручную

DTO - это pojo Объект переносит данные между процессами

...