Как правильно написать POST запрос для Point?

135
26 июня 2019, 06:10

Есть сущность

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.bedatadriven.jackson.datatype.jts.serialization.GeometryDeserializer;
import com.bedatadriven.jackson.datatype.jts.serialization.GeometrySerializer;
//....
@Entity
@Data
public class ParkingPlace {
//....
    @NotNull
    @Column(columnDefinition = "Geometry")
    @JsonSerialize(using = GeometrySerializer.class)
    @JsonDeserialize(using = GeometryDeserializer.class)
    private com.vividsolutions.jts.geom.Point coordinate;
//....
    public ParkingPlace() {
    }
}

Использую spring boot.

Есть REST контроллер, который пока только выдает элемент сущности из базы и по идее должен в неё записать новую.

@PostMapping
public ParkingPlace post(ParkingPlace place){
    return service.savePlace(place);
}

Не пойму как мне правильно отправть POST запрос (а точнее составить тело запроса, чтобы этот запрос десериализовался в сущность с полем coordinate).

Когда послыаю запрос без поля coordinate, то запрос обрабатывается и создается объект (но соответственно поле coordinate = null).

При попытке хоть как то задать координаты в эту сущность сервер пишет ошибку

Field error in object 'parkingPlace' on field 'coordinate': rejected value [coordinates:POINT(623.1214, 12.623462346)]; codes [typeMismatch.parkingPlace.coordinate,typeMismatch.coordinate,typeMismatch.com.vividsolutions.jts.geom.Point,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [parkingPlace.coordinate,coordinate]; arguments []; default message [coordinate]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'com.vividsolutions.jts.geom.Point' for property 'coordinate'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'com.vividsolutions.jts.geom.Point' for property 'coordinate': no matching editors or conversion strategy found]]

Пробовал писать запрос по разному, никак не получается.

GET запрос выдает такую сущность

{
    "id": 1,
    "coordinate": {
        "type": "Point",
        "coordinates": [
            4.124,
            112.1213
        ]
    },
    "isFree": false,
    "area": {
        "id": 27,
        "name": " Wall Streat",
        "freeSpaceCount": 2
    }
}

Как мне правильно написать тело POST запроса для моего случая?

Answer 1

В данном случае всё зависит от GeometryDeserializer.class, если он настроен так, чтобы десериализовать объект сериализованный GeometrySerializer.class, то в теле POST достаточно будет передать:

{
    "coordinate": {
        "type": "Point",
        "coordinates": [
            4.124,
            112.1213
        ]
    }
}
READ ALSO
Как вывести List пользователей используя jsp?

Как вывести List пользователей используя jsp?

Есть класс Person с параметрами: name, age, email, а также getter и setterПосле чего я создал класс PersonStorage - который имеет два метода:

128
Редирект в контроллере

Редирект в контроллере

У меня есть таблица с компьютерами и таблица с их характеристиками

155
Добавить связь к промежуточной таблице

Добавить связь к промежуточной таблице

Возникла проблема с добавлением роли к аккаунту

130
Почему Spring Data делает лишние запросы?

Почему Spring Data делает лишние запросы?

Есть следующий метод JPA репозитория:

162