為了保存一個新的物件,比如一個 User 物件:
class User {
private String name;
private String email;
}
我應該要求我的客戶提交這樣的@RequestBody:
{
"name":"Josh",
"email":"[email protected]"
}
或者也許應該像這樣要求一些@RequestParams:
/api/user?name=Josh&&email=josh@kmail.com
并創建一個從這些引數構建物件的方法?如果它與我的問題有關,我正在處理我的專案中的一些復雜物件。
謝謝你的幫助。
uj5u.com熱心網友回復:
Spring MVC 有 2 個注釋來處理到物件的映射。
@RequestBody將請求有效負載映射到物件。@ModelAttribute將請求引數(自動)映射到物件。
所以實際上兩者都可以自動映射到您的User物件。
@PostMapping
public User register(@RequestBody User user) {}
或者
@PostMapping
public User register(@ModelAttribute User user) {}
第一個將使用有效負載,第二個將使用請求引數來創建User物件。所以兩者都可以作業,但服務于不同的用例。
uj5u.com熱心網友回復:
您的兩種方法都可以使用 - 但標準方法肯定是使用:
POST @RequestBody JSON of { user } to /users
GET 從技術上講是可行的——但使用 HTTP 方法 GET 意味著該操作是冪等的,這意味著它不會更改底層資料(從客戶端的角度來看)——而在創建新用戶時幾乎肯定不是這種情況。
此外,當前的 User 物件足夠簡單,可以由查詢字串引數表示 - 但將來可能會發生變化,因為 User 可以包含各種聯系資訊,例如地址。
uj5u.com熱心網友回復:
@RequestBody 注解自動將封裝在請求體中的 JSON 資料反序列化為特定的模型物件。例子:
@PostMapping("/create")
@ResponseBody
public Product createProduct(@RequestBody Product product) {
// custom logic
return product;
}
與@RequestBody 不同的是,@RequestParam 注解僅支持簡單的資料型別,例如 int 和 String。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/339646.html
