將一部分編組到一個物件中

如果要將零件的內容轉換為域物件(例如 UserAccountAddress),則過程非常簡單:

可以上傳多個部分,每個部分都有不同的名稱。對於每個零件名稱,你將需要一個用 @RequestPart 註釋的引數,其名稱與零件名稱相匹配。

要接收通過 HTTP Post 上傳的檔案,你需要執行以下操作:

@RequestMapping(
    value = "...",
    method = RequestMethod.POST,
    consumes = MediaType.MULTIPART_FORM_DATA_VALUE
)
public Object uploadFile(
    @RequestPart Address address,
) {
    .
    .
    .
}

作為原始 HTTP 請求:

POST /... HTTP/1.1
Host: ...
Content-Type: multipart/form-data; boundary=----------287032381131322

------------287032381131322
Content-Disposition: form-data; name="address"; filename="address.json"
Content-Type: application/json

{"houseNumber": "10/A", "streetName": "Dumbldore Road", "town": "Hogsmede"}
------------287032381131322--

最重要的是:

  • 部件的名稱必須與變數的名稱匹配。
  • 如果你將其作為常規請求傳送,則該部件的 Content-Type 必須是 Spring 能夠處理的部件。也就是說,如果你可以使用 Content-Type 執行 POSTfoo/bar,並且 Spring 能夠將其轉換為物件,那麼它也可以將一個部件編組到一個物件中。
  • 必須能夠設定零件的 Content-Type。如果你不能,這種方法將無法工作 - Spring 不會嘗試猜測該部分的 Content-Type