Я не могу использовать успокоительный API со ссылками HATEOAS, сгенерированными из репозиториев Springboot.
Рассмотрим следующую модель:
public class Order {
private UUID id;
private String orderNumber;
private Location location;
}
public class Location {
private String street;
private String town;
}
Просто для удобства чтения я пропустил любой шаблонный код, такой как геттеры, сеттеры и конструкторы.
После запуска службы я создал пустой Order
, который я могу запросить как:
>curl http://localhost:8080/orders/1
Что возвращает:
{
"orderNumber": "ON 0815",
"_links": {
"self": {
"href": "http://localhost:8080/orders/1"
},
"location": {
"href": "http://localhost:8080/orders/1/location"
}
}
}
Теперь, если я позвоню curl http://localhost:8080/orders/1/location
, он вернет HTTP 404 - Not found
, что разумно, потому что я еще не установил это.
Далее я создаю Location
для установки через HTTP POST
:
curl -XPOST http://localhost/8080/locations \
-H 'Content-Type: application/json' \
-d '{"street": "Bakerstreet 221B", "town": "London"}'
Служба отвечает:
{
"street": "Bakerstreet 221B",
"town": "London",
"_links": {
"self": {
"href": "http://localhost:8080/locations/1"
}
}
}
Теперь мы подошли к делу, я застрял в. Как мне связать Location
с Order
? Ни одна из моих попыток не сработала. Буду благодарен за любой совет.
Пока я пробовал:
1. Поместить объект
>curl -XPUT http://localhost:8080/orders/1 \
-H 'Content-Type: application/json' \
-d '{"orderNumber": "ON 0815", "_links": {"self": {"href": "http://localhost:8080/orders/1"}, "location": {"href": "http://localhost:8080/orders/1/location"}}}'
2. ЗАПИСАТЬ объект
>curl -XPATCH http://localhost:8080/orders/1 \
-H 'Content-Type: application/json' \
-d '{"_links": {"self": {"href": "http://localhost:8080/orders/1"}, "location": {"href": "http://localhost:8080/orders/1/location"}}}'
3. ПОСТ на ссылку
>curl -XPOST http://localhost:8080/orders/1/location \
-H 'Content-Type: application/json' \
-d '{"street": "Bakerstreet 221B", "town": "London"}'