将一部分编组到一个对象中
如果要将零件的内容转换为域对象(例如 User
或 Account
或 Address
),则过程非常简单:
可以上传多个部分,每个部分都有不同的名称。对于每个零件名称,你将需要一个用 @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
执行POST
到foo/bar
,并且 Spring 能够将其转换为对象,那么它也可以将一个部件编组到一个对象中。 - 你必须能够设置零件的
Content-Type
。如果你不能,这种方法将无法工作 - Spring 不会尝试猜测该部分的Content-Type
。