[英]Posting multiple files to Database - Null value for ManyToOne relationship
[英]Posting a resource with ManyToOne relationship
這個問題主要是關於如何設計一個REST API以及什么是最佳實踐。 我試圖找出用於POST
服務的REST端點,請考慮以下示例代碼:
class Person {
String name;
@OneToMany
List<Address> addresses;
}
class Address {
String someAttribute;
@ManyToOne
Person person;
}
要添加新Address
,其余端點可能看起來像POST api/**v1**/address
。 主要問題在於RequestBody
因為我們只有Person
的id
,所以我們需要像下面那樣傳遞json:
{
"someAttribute": "someValue"
"personId": 1
}
在Controller
方法中,我們不能簡單地使用@RequestBody Address address
作為Rest終結點方法的參數,因為在Address
類中沒有personId
。
我想了解什么是最佳實踐,其余端點應該如何?
PS:上面的代碼是一個偽代碼,只是為了輕松解釋問題。
為避免混淆,我已更新了端點URL。
請通過Spring API中的@PathVariables批注。
使用@PathVariables,您可以從URL獲取person_id和address_id。
創建一個人(最初使用n個地址)
POST api/{api_version}/person
更新一個人(僅更新“人”詳細信息而不是地址)
PUT api/{api_version}/person/{person_id}
給人添加一個新地址
POST api/{api_version}/person/{person_id}/addresses
更新現有人員地址
PUT api/{api_version}/person/{person_id}/addresses/{address_id}
類結構
class Address {
Integer id;
String someAttribute;
}
class Person {
Long id;
String name;
@OneToMany
List<Address> addresses;
}
樣本資源實施
@RequestMapping(value="api/{api_version}/person/{person_id}/addresses/{address_id}", method = RequestMethod.PUT)
public ResponseEntity<ApiCustomResponse> updateAddress(
@PathVariable("person_id") Long person_id,
@PathVariable("address_id") Integer address_id, @RequestBody Address address) {
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.