簡體   English   中英

通過ManyToOne關系發布資源

[英]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因為我們只有Personid ,所以我們需要像下面那樣傳遞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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM