W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎勵
在使用了RESTful服務(wù)的場景下,非瀏覽器的客戶端也可以直接提交多路文件請求。上一節(jié)講述的所有例子與配置在這里也都同樣適用。但與瀏覽器不同的是,提交的文件和簡單的表單字段,客戶端發(fā)送的數(shù)據(jù)可以更加復(fù)雜,數(shù)據(jù)可以指定為某種特定的內(nèi)容類型(content type)——比如,一個多路上傳請求可能第一部分是個文件,而第二部分是個JSON格式的數(shù)據(jù):
POST /someUrl
Content-Type: multipart/mixed
--edt7Tfrdusa7r3lNQc79vXuhIIMlatb7PQg7Vp
Content-Disposition: form-data; name="meta-data"
Content-Type: application/json; charset=UTF-8
Content-Transfer-Encoding: 8bit
{
"name": "value"
}
--edt7Tfrdusa7r3lNQc79vXuhIIMlatb7PQg7Vp
Content-Disposition: form-data; name="file-data"; filename="file.properties"
Content-Type: text/xml
Content-Transfer-Encoding: 8bit
... File Data ...
對于名稱為meta-data
的部分,你可以通過控制器方法上的@RequestParam("meta-data") String metadata
參數(shù)來獲得。但對于那部分請求體中為JSON格式數(shù)據(jù)的請求,你可能更想通過接受一個對應(yīng)的強(qiáng)類型對象,就像@RequestBody
通過HttpMessageConverter
將一般請求的請求體轉(zhuǎn)換成一個對象一樣。
這是可能的,你可以使用@RequestPart
注解來實(shí)現(xiàn),而非@RequestParam
。該注解將使得特定多路請求的請求體被傳給HttpMessageConverter
,并且在轉(zhuǎn)換時考慮多路請求中不同的內(nèi)容類型參數(shù)'Content-Type'
:
@RequestMapping(path = "/someUrl", method = RequestMethod.POST)
public String onSubmit(@RequestPart("meta-data") MetaData metadata, @RequestPart("file-data") MultipartFile file) {
// ...
}
請注意MultipartFile
方法參數(shù)是如何能夠在@RequestParam
或@RequestPart
注解下互用的,兩種方法都能拿到數(shù)據(jù)。但,這里的方法參數(shù)@RequestPart("meta-data") MetaData
則會因?yàn)檎埱笾械膬?nèi)容類型請求頭'Content-Type'
被讀入成為JSON數(shù)據(jù),然后再通過MappingJackson2HttpMessageConverter
被轉(zhuǎn)換成特定的對象。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: